前言:我是喜欢编程的一只菜鸟,在自学过程中,对遇到的一些问题和困惑,有时虽有一点体会感悟,但时间一长就会淡忘,很不利于知识的积累。因此,想通过博客园这个平台,一来记录自己的学习体会,二来便于向众多高手请教。
最近学习C语言,主要使用C-Free进行编写。在学习过程中发现,书中提示C语言必须要遵循某种写法,但是奇怪的是,不按照这种写法却也能通过编译。
如以下代码:
1 #include <stdio.h> 2 3 struct point /*定义结构体*/ 4 { 5 int x; 6 int y; 7 }; 8 9 int main(int argc, char *argv[]) 10 { 11 struct point A; 12 A.x = 2; 13 A.y = 3; 14 printf("A点坐标为:[%d, %d] ", A.x, A.y); 15 return 0; 16 }
按书中所讲:第11行必须写成struct point A,而不能写成 point A。但实际却能顺利通过编译,后来又用VC++ 6.0进行测试,仍然通过编译。因为是同时看两本书自学,两本书上都这样写,我相信书上的应该是正确的。经过多次尝试,发现是默认文件扩展名的问题。
C-Free和VC++ 6.0是根据源文件扩展名来编译的。如果源文件扩展名为.c,则视为C语言源文件进行编译;如果源文件扩展名为.cpp,则视为C++源文件进行编译。C-Free和VC++ 6.0默认的源文件扩展名都是.cpp,编译器视为C++源文件进行编译,而C++允许在声明结构体时省略关键字struct,所以就能顺利通过编译。
如果保存时将源文件扩展名改为.c,或者修改默认扩展名,就会视为C语言源文件进行编译。因C语言不允许省略关键字struct,故编译时会提示错误。所以,在学习C语言时,应将IDE的默认扩展名设置为.c,或者先保存为.c文件再进行编译,以避免造成不必要的困惑。