GCC默認的標准不是ANSI C,而是GNU C90


我以前以為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標准編譯為什么沒報錯呢? 我也不知道


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM