-1

次の C コードを書きました。

#define MAX_T(a,b,d) \
    { int len = (d);printf("len %d", len);}

int main()
{
    //MAX_T(10,30, smgarbage)
    MAX_T(10,30, len)
}

コメントアウトしMAX_T(10,30, smgarbage)て実行すると、出力されますlen 24。コメントアウトしMAX_T(10,30, len)て実行するMAX_T(10,30, smgarbage)と、次のコンパイラ エラーが発生します。

test.c: In function 'main':  
test.c:34: error: 'smgarbage' undeclared (first use in this function)  
test.c:34: error: (Each undeclared identifier is reported only once  
test.c:34: error: for each function it appears in.)

実行時にMAX_T(10,30, len)コンパイラエラーが発生しないのはなぜですか? ステートメントはint len = (d);これを引き起こしていますか?どのように?

4

1 に答える 1