13

このcプログラムで は

#include<stdio.h>
int main()
{

        #if UnDefinedSymbolicConstant==0
                printf("UnDefinedSymbolicConstant is equal to 0\n ");
        #else
                printf("UnDefinedSymbolicConstant is not equal to 0\n");

        #endif
        return 0;
}

UnDefinedSymbolicConstant#defineどこにもありませんでしたが、それでも0と見なされ、出力はgcc-4.3.4 次の ようになります。

UnDefinedSymbolicConstant is equal to 0

それで、 これは標準的な動作ですか、それともgccでのみこのように機能しますか?

4

2 に答える 2

13

はい、これは 6.10.1 の標準で指定されています。

マクロ展開と定義された単項演算子によるすべての置換が実行された後、残りのすべての識別子 (キーワードと字句的に同一のものを含む) は pp-number 0 に置き換えられます。

于 2012-07-04T13:25:17.800 に答える
6

-Wundefこれがデフォルトですが、 gccのオプションを使用して、少なくとも警告を生成することができます。

`-Wundef': マクロではない識別子が `#if' ディレクティブで `defined' の外にある場合は常に警告します。そのような識別子はゼロに置き換えられます。

于 2012-07-04T13:32:05.003 に答える