我一直在看这个太久了,只是看不出问题所在:
#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抱怨:
在功能'main'中:
第17行:错误:数字常量之前的预期标识符
这两项任务在预处理后应该是相同的,但显然我错过了一些......
您可以在此处运行代码:http://codepad.org/0c1aUBLm
答案 0 :(得分: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 )
答案 1 :(得分:2)
不会F(1, 2)
扩展为( v.1 = 1, v.2 = 2, v )
?
#define F(x,y) ( v.a = x, v.b = y, v )
应该更好