2012-06-12 83 views
9

我想知道爲什麼我的C程序不打印任何信息。在編程方面,我是100%新手,在過去的幾周裏,我已經能夠在Ruby和Python中學習一些東西,但是我對C的東西沒有任何幫助。這裏是總基線,每個人都先學會的簡單程序:爲什麼我沒有輸出非常簡單的Hello World程序?

#include <stdio.h> 

int main() 

    { 
     printf("Hello World\n"); 
     return 0; 
    } 

所以我寫了這個,我保存爲hello.c。現在,我cd到它在哪裏,和目錄,然後我嘗試

gcc hello.c 

,並沒有任何反應 - 沒有錯誤,只是什麼都沒有。如果我寫的,而不是

gcc hello.c -o hello 

一個新的可執行文件寫入我的目錄,當我打開它,它看起來像正常的命令行,並有「Hello World」的寫在那裏,如我所料,我端第一次。

我也試過讓hello.c構建可執行文件本身,但是當我做,我得到

syntax error near unexpected token `(' 
`int main()' 
+0

謝謝 - 是的,在這方面很新穎,謝謝大家的清晰和簡單的反饋。現在明白了! – user1451632

回答

12

當你鍵入

gcc hello.c 

,並沒有任何反應,這是可以預料的。或者更確切地說,GCC會用默認名稱編譯一個可執行文件,對我來說這是a.out。如果我然後在命令行上輸入./a.out,我會看到輸出。

我認爲這裏可能會有一個稍大的概念問題,儘管從你的Ruby/Python背景。 Ruby和Python是(通常)解釋語言,這意味着當你創建一個腳本文件時,你可以將它標記爲可執行文件,並且通過操作系統將啓動一個程序來讀取文件併爲你執行它們。但是,C編譯。所以當你運行GCC時,它會把你的源文件轉換成一個可執行文件,使用默認或指定的名稱。此時,除非編譯過程出現問題,否則不會期望看到任何輸出。然後,您可以運行./hello這是一個可執行文件,並查看您的輸出。

這也解釋了爲什麼你不能將hello.c標記爲可執行文件並運行它。它需要首先編譯爲可執行文件。它看起來像系統假裝它是一個shell腳本,這是不是,並給你一個語法錯誤。

5

第一次,你的可執行文件被命名爲「a.out的」(或「A.EXE」 Windows),這是gcc給出的可執行文件的歷史默認名稱。

你應該花一些時間來找出源和可執行文件之間的差異,以及打開和執行,之間也...

7

gcc hello.c將生成一個名爲a.out
gcc hello.c -o hello將生成一個文件名爲文件hello

這些是可執行文件,您需要執行/運行這些文件以獲取輸出。

運行這些作爲

./a.out./hello

7

GCC的hello.c -o你好指定要創建一個名爲hello.exe的可執行文件。

您必須編譯所有C文件,然後運行可執行文件才能運行該程序。你實際上不能運行.c文件。當你不指定一個exe時,它只是編譯。你沒有錯誤的事實是一件好事,因爲這意味着你的代碼是正確的! :)

3

歡迎使用編程和堆棧溢出!

gcc hello.c 

編譯文件並生成可執行文件'a.out',但不執行它。這就是爲什麼在你的命令行中沒有更多事情發生。
要開始執行,你必須鍵入:

./a.out 

就像你爲「你好」,如果我理解正確。
如果你想用C語言編程,你必須要學習編譯,鏈接和執行的區別,找到一個好的初學者的書或教程,這是值得的!
乾杯!

0

當您設置您的hello.c源文件的保護你得到了

syntax error near unexpected token `(' 
`int main()' 

錯誤,並試圖運行它。

使用gcc可將您的.c源文件轉換爲可運行的二進制程序。

gcc -o hello hello.c 

我使用的順序並不重要。我習慣這樣編譯。你這樣編譯

gcc hello.c -o hello 

這很好。

成功的編譯和鏈接創建名爲hello的輸出文件,這是你可以運行什麼

./hello 
-1

您是否嘗試過包括#include<conio.h>,包括getch()return 0;前顯示終端窗口。

相關問題