程式碼中 gets(string); 置於第 8 行,緊接著第 9 行宣告變數 int i, num = 0, word = 0;,使用 Visual Studio (MSVC) 編譯報錯:error C2143: syntax error : missing ';' before 'type' 以及後續變數未宣告錯誤。
.c 檔,不支援 C99 的混合宣告。int main() {
char string[100];
char c;
int i, num = 0, word = 0; // 所有宣告在最前面
gets(string);
for (i = 0; (c = string[i]) != '\0'; i++) { ... }
}
.cpp,MSVC 以 C++ 模式編譯,支援混合宣告。gcc -std=c99 test.c 或 clang -std=c11 test.c,完整支援 C99/C11。ISO C11 或 ISO C17(仍建議改 .cpp 或 GCC)。跨平台 C 專案建議遵循 C89 風格(宣告前置),或改用 C++/現代 C 編譯器,避免此類移植問題。