用慣了GCC編譯器,也就容易將C語言的寫法和其它的寫法混淆起來。雖然在GCC平臺上可以順利編譯,但是在其它編譯器比如Microsoft C++編譯器下就有可能編譯出錯(cuò)了。看下面這段代碼:
#include <stdio.h>
int main(void){
char *s1 ;
s1 = "Hello";
char *s2 ;
s2 = "World";
printf("%s %s\n",s1,s2);
return 0;
}
它看上去是可以執(zhí)行的,在GCC編譯器下它確實(shí)也是可以執(zhí)行的。但在VC++中則不能執(zhí)行,準(zhǔn)確地說,在未開啟編譯器選項(xiàng)為標(biāo)準(zhǔn)C99的情況下,是會(huì)編譯出錯(cuò)的。
按如上所示的編譯器在C89標(biāo)準(zhǔn)下編譯,GCC pass,MS C++ fatal。錯(cuò)誤指示會(huì)在s2 = "World"; 這句話上,錯(cuò)誤代碼通常為
error C2143:語法錯(cuò)誤:缺少“;”(在“類型”的前面)
要是您的類型剛好由typedef來定義的話,則會(huì)出現(xiàn)錯(cuò)誤代碼:
error C2275:“your_type”:將此類型用作表達(dá)式非法
下面兩幅截圖展示了以上兩種錯(cuò)誤。因?yàn)樵谧兞柯暶鳝h(huán)節(jié)出了錯(cuò)誤,因此會(huì)引發(fā)一連串的錯(cuò)誤,包括變量未定義等錯(cuò)誤。
建議:為了保持源碼能夠保持跨編譯器特性,我們最好能夠按舊時(shí)的寫法來寫(C89)直到它確實(shí)被淘汰為止。