我以前以為GCC默認的C標准是ANSI C,但是看了文檔才知道默認標准是C90 with GNU extensions。
"extensions"有那些?看這里:http://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html#C-Extensions
如果想要返璞歸真,只遵循ANSI C,編譯時加上-ansi選項即可(再加-pedantic選項,確保編譯器使用該標准)。
加上這個選項后,你會發現好多平時無錯的地方,編譯時卻出錯。
最普遍的錯誤是"// 開頭的單行注釋",因為它在ANSI C中是不允許的,所以整行報錯。
來看一個特殊的例子吧
按理說,__func__ 是C99的特性,用ANSI C標准編譯為什么沒報錯呢? 我也不知道