2013-04-14 58 views
0

我一直在尋找這個時間過長,看不出是什麼問題:混淆gcc的錯誤信息

#include <stdio.h> 

typedef struct { 
    int a; 
    int b; 
} S; 

#define F(a,b) (v.a = a, v.b = b, v) 

int main(void) { 
    S s, v; 

    s = (v.a = 1, v.b = 2, v); // this works as expected 

    printf("s = { %d %d } \n", s.a, s.b); 

    s = F(1, 2); // but gcc complains about the macro equivalent 

    printf("s = { %d %d } \n", s.a, s.b); 

    return 0; 
} 

GCC抱怨:

In function 'main':
Line 17: error: expected identifier before numeric constant

兩個預處理後的作業應該是相同的,但顯然我錯過了一些東西...

您可以在此運行代碼:http://codepad.org/0c1aUBLm

回答

2
#define F(a,b) (v.a = a, v.b = b, v) 

當1和2作爲參數調用,這個擴展到

(v.1 = 1, v.2 = 2, v) 

更改宏的參數名稱不同的東西:

#define F(first,second) (v.a = first, v.b = second, v) 
+0

D'哦 - 我知道它是什麼簡單而明顯的,但我無法看到它 - 感謝... –

+2

@PaulR我假設你很累了:)得到一些咖啡/睡覺:) – 2013-04-14 21:38:09

+1

你現在正在 - 腦功能嚴重枯竭剛纔。 ;) –

2

不會F(1, 2)擴大到(v.1 = 1, v.2 = 2, v)

#define F(x,y) (v.a = x, v.b = y, v) 

應該會更好

+0

是的,它會... – 2013-04-14 21:36:19

+1

謝謝@simonc - H2CO3狹義地毆打你的答案,但反正有投票權。 ..;) –