初學 C 語言時,常遇到「書上寫法報錯,實際卻能通過編譯」的困惑。典型案例:結構體變量聲明時,教材要求寫 struct Point p;,但 IDE 中直接寫 Point p; 卻能編譯通過。這背後的原因,往往在於 源文件副檔名決定了編譯器的語言模式。
struct Point { int x, y; };
int main() {
Point p; // 未加 struct 關鍵字
p.x = 1; p.y = 2;
return 0;
}
在 C-Free、VC++ 6.0 中,若文件名為 test.cpp,上述代碼編譯無錯誤;改為 test.c 則報錯 error: 'Point' undeclared。
struct 關鍵字。struct。C-Free、VC++ 6.0 等 IDE 預設新建文件副檔名為 .cpp,導致初學者實際上在寫 C++ 而非 C,掩蓋了語法錯誤。
.c,或修改 IDE 預設模板(如 C-Free 的 Options → Environment → Default Extension 設為 c)。#ifdef __cplusplus 條件編譯,輸出當前編譯模式,確保為 C 模式。struct TagName var;,養成可移植、符合標準的編碼習慣。同理,C++ 的 // 單行註釋、const 默認內部鏈接、變量聲明位置靈活等特性,在 .c 文件中可能不被支持(取決於編譯器對 C99 的支持程度)。切換副檔名是區分兩種語言模式最直觀的方法。