0

我一直在看这个太久了,只是看不出问题是什么:

#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

4

2 回答 2

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 )
于 2013-04-14T21:35:09.860 回答
2

不会F(1, 2)扩展到( v.1 = 1, v.2 = 2, v )?

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

应该更好

于 2013-04-14T21:35:26.410 回答