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 行目: エラー: 数値定数の前に識別子が必要です

2 つの割り当ては、前処理後に同じになるはずですが、明らかに何か不足しています...

ここでコードを実行できます: 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 に答える