Linux 運行程序報錯 syntax error near unexpected token `(' ,原因你絕對想不到

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[])'

嘗試過程如下:

  1. 考慮到 Windows 和 Linux 下換行符的差異,直接在 Linux 下重新創建文件並使用 Vim 編寫,無果;
  2. 考慮到報錯信息提到 main 字樣,仔細查看 main 附近代碼,看是否有中文標點符號,無果;
  3. 考慮…知識儲備和經驗不夠了…

但很多時候,在我懷疑人生而無果但依然堅持的情況下,能夠讓我突然窺探到我想要的答案,很是幸運。

3. 原因

在 Linux 下使用如下命令編譯源文件後

gcc func.c

在控制檯習慣性的輸入 ./fu 並使用 Tab 鍵自動補全來運行程序,並且一氣呵成

./func.c

結果就報出了以上錯誤;
其實編譯後生成的可執行文件是 a.out,而我誤以爲編譯生成了 func 可執行文件,就沒想到自動補全後運行的是 func.c 源文件,而源文件是無法運行的。

4. 結語

首先我得吐槽一下:運行非執行文件,報錯居然是這樣的。又算是栽到你手裏了 – Linux

好吧,又再次深刻的體會到了 習慣的力量,這力量是巨大的,巨大到你不會認爲執行命令的語句是錯誤的,眼睛死死的盯着出錯信息來進行判斷。

本博文很大概率並不是大家想要的預期答案,甚至會認爲這是在瞎扯。確實,對於不會面臨該問題的人來說是瞎扯,但是因爲個人習慣而面臨的時候,也算是一種解決問題的思路。

一切沒有解決的問題都是大問題,一切解決了的問題都是小問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章