VC++支持ANSI C毋庸置疑,不過對於是否支持C99,我倒看到兩種說法:
1. 不支持C99.
2. 支持C99的個別特性.
- http://en.wikipedia.org/wiki/ANSI_C#Compilers_supporting_ANSI_C
- http://social.msdn.microsoft.com/Forums/pl-PL/vclanguage/thread/8c3ce91d-e4bc-4a95-a122-b19cac1e94aa
到底是神馬情況? 我試驗了VC++ 2010,可以確定VC++ 2010支持C99下面的幾個特性:
- 支持 // 開頭的單行注釋
- 支持 long long等數據類型,但是printf、scanf的格式化串不支持long long類型
- 支持可變參數宏
VC++ 2010不支持C99下面的幾個特性:
- 支持不定長的數組
- 變量聲明不必放在語句塊的開頭
- 除了已有的 __line__、__file__ 以外,增加了 __func__ 得到當前的函數名。
結論就是VC++ 2010對C99的支持少得可憐的。
ps: VC++ 2010雖然用不了,但是可以用__FUNCTION__。但是__FUNCTION__和__func__性質是不一樣的。前者是VC++編譯器指定的,后者是C99標准指定的。