初學 C 語言時,最容易在「看起來對卻跑不出結果」的程式碼前卡住。以下面這段代碼為例,一次暴露了三個經典錯誤:
#include <stdio.h>
void ema(void);
int main(void)
{
int i = 1;
while (i ≤ 3) // 錯誤 1:使用全形 ≤ 而非 <=
{
ena(); // 錯誤 2:呼叫 ena() 但定義的是 ema()
i++;
}
printf("Which!");
return 0;
}
void ema(void)
{
printf("for\n");
}
≤(U+2264)會被視為無效 token,必須改成 <=。ema()、定義 ema(),呼叫卻寫 ena(),連結器會報 undefined reference to 'ena'。改為 ema(); 即可。#include 後空白,應補全 #include <stdio.h>,否則 printf 無宣告會產生警告甚至錯誤。#include <stdio.h>
void ema(void);
int main(void)
{
int i = 1;
while (i <= 3) // ASCII <=
{
ema(); // 與定義一致
i++;
}
printf("Which!");
return 0;
}
void ema(void)
{
printf("for\n");
}
-Wall -Wextra 或 MSVC /W4),未宣告函數、隱式宣告都會被攔截。這三個錯誤幾乎是每位 C 語言初學者的必經之路,記住它們,下次除錯就能事半功倍。