1. 前言
本來是想隨意寫一個簡單的程序進行測試,結果一個報錯讓我懷疑人生。本文描述的報錯原因,大家是絕對想不到的。我也很無奈呀!請看我一一道來,純粹自嘲吧。
2. 探索過程
就拿最熟悉的 Hello world 來演示吧,程序如下:
#include "stdio.h"
int main(int argc, char *argv[])
{
printf("hello world!\n");
return 0;
}
代碼簡單,可就是編譯通過,運行出錯,出錯信息如下:
./func.c: line 3: syntax error near unexpected token `('
./func.c: line 3: `int main(int argc, char *argv[])'
嘗試過程如下:
- 考慮到 Windows 和 Linux 下換行符的差異,直接在 Linux 下重新創建文件並使用 Vim 編寫,無果;
- 考慮到報錯信息提到 main 字樣,仔細查看 main 附近代碼,看是否有中文標點符號,無果;
- 考慮…知識儲備和經驗不夠了…
但吉人自有天相,很多時候,在我懷疑人生而無果的情況下,能夠讓我突然窺探到我想要的答案,很是幸運。
3. 原因
在 Linux 下操作,習慣性的使用 Tab 鍵自動補全功能了,在我使用如下命令編譯源文件後
gcc func.c
又再次習慣性的輸入 ./fu 並使用 Tab 鍵自動補全來運行程序,並且一氣呵成,全程腦子都不需要思考。
./func.c
結果就報出了該錯誤;其實此刻默認生成的 bin 文件是 a.out
4. 結語
首先我得吐槽一下:運行非 bin 文件,報錯居然是這樣的。又算是栽到你手裏了 – Linux
好吧,又再次深刻的體會到了 習慣的力量,這力量是巨大的,巨大到你不會認爲執行命令的語句是錯誤的,眼睛死死的盯着出錯信息來進行判斷。