用惯了GCC编译器,也就容易将C语言的写法和其它的写法混淆起来。虽然在GCC平台上可以顺利编译,但是在其它编译器比如Microsoft C++编译器下就有可能编译出错了。看下面这段代码:
#include <stdio.h>
int main(void){
char *s1 ;
s1 = "Hello";
char *s2 ;
s2 = "World";
printf("%s %s\n",s1,s2);
return 0;
}
它看上去是可以执行的,在GCC编译器下它确实也是可以执行的。但在VC++中则不能执行,准确地说,在未开启编译器选项为标准C99的情况下,是会编译出错的。
按如上所示的编译器在C89标准下编译,GCC pass,MS C++ fatal。错误指示会在s2 = "World"; 这句话上,错误代码通常为
error C2143:语法错误:缺少“;”(在“类型”的前面)
要是您的类型刚好由typedef来定义的话,则会出现错误代码:
error C2275:“your_type”:将此类型用作表达式非法
下面两幅截图展示了以上两种错误。因为在变量声明环节出了错误,因此会引发一连串的错误,包括变量未定义等错误。
建议:为了保持源码能够保持跨编译器特性,我们最好能够按旧时的写法来写(C89)直到它确实被淘汰为止。