前言:我是喜歡編程的一只菜鳥,在自學過程中,對遇到的一些問題和困惑,有時雖有一點體會感悟,但時間一長就會淡忘,很不利於知識的積累。因此,想通過博客園這個平台,一來記錄自己的學習體會,二來便於向眾多高手請教。
最近學習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]\n", 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文件再進行編譯,以避免造成不必要的困惑。