在StackOverflow看到的。
這段程式,在GCC和Clang會失敗,而在VC正常運作。
1 | int main() |
用gcc -E
下去看的結果如下
1 | int main() |
這是由於在未標準化的年代,像是unix,linux等字都會採到地雷。
不過可以用 gcc -std=c89
強讓他走標準規範編譯。
可以看到
1 | $ cpp --std=c89 -dM < /dev/null | grep linux |
在gnu89裡面GCC自己加了linux的定義下去了。注意這邊的cpp
是The C Preprocessor,跟C++無關。
用-dM
來印出所有被Preprocessor定義的值。
既然知道Preprocessor定一些什麼值之後,就可以順利避開陷阱了。