2014-07-09 22 views
6

我使用的是GCC版本4.7.1,但我也在GCC 4.8上試過這個。這裏是代碼我試圖編譯:gcc在Windows上:生成的「a.exe」文件消失

#include <stdio.h> 

void print(int amount) { 
    int i; 
    for (i = 0; i < 5; i++) { 
     printf("%d", i); 
    } 
} 

int main(int argc, char** argv) { 
    print(5); 
    return 0; 
} 

它看起來像它應該工作,當我...

gcc main.c 

編譯這需要一段時間來編譯,生成一個a.exe文件和a.exe文件消失。它不會給我任何錯誤,我的代碼。

這裏有證明的GIF,因爲有些人誤解了這一點: proof

+0

「產生a.exe文件並且a.exe文件消失」。請詳細說明。你是如何得出這個結論的? –

+0

呃,我在編譯時右邊打開了這個文件夾,它會在編譯時創建一個a.exe文件。然後在編譯完成後,可執行文件消失。 – chapman

+0

請改變你的問題,這是誤導和混亂。您的可執行文件不會消失。你的終端窗口。 –

回答

7

(由於ahoffer的deleted answer不是很正確,我會發布此,基於註釋信息。)

在Windows上,海灣合作委員會生成一個名爲a.exe默認的可執行文件。 (在類UNIX系統上,由於歷史原因,默認名稱爲a.out。)通常,您可以使用-o選項指定名稱。

顯然,生成的a.exe文件會在您的防病毒軟件中產生錯誤的肯定匹配,所以該文件會在創建後不久自動刪除。我看到Avast的開發人員已經對這種誤報有所瞭解。

請注意,防病毒程序通常會檢查文件的內容,而不是其名稱,因此生成名稱不是a.exe的文件將無濟於事。不過,對程序進行一些更改可能會更改可執行文件的內容,以避免該問題。

你可能會嘗試編譯一個簡單的「hello,world」程序來查看是否發生了同樣的事情。

感謝Chrono Kitsune鏈接到this relevant Mingw-users discussion的評論。

這與您的問題無關,但應在程序輸出結尾處打印換行符('\n')。它在Windows環境中可能沒有多大關係,但通常程序的標準輸出應該(幾乎)總是在其最後一行結尾處具有換行符。

+2

[相關的Mingw用戶郵件列表討論](http://comments.gmane.org/gmane.comp.gnu.mingw.user/38529) –

+1

@ChronoKitsune:謝謝,我已經包括它在我的答案 –

2

有你的代碼是剛剛退出不正確的問題。

你必須在命令行中運行它,它會顯示所有信息。

start-> run-> cmd,然後cd到您的目錄。然後a.exe。如果你不想這樣做,你可以在返回main之前添加一個sleep()。

更重要的是,在您的代碼中,當您將print(5)傳遞給您的函數時,它不會被使用。

+0

當我試圖解決這個問題的時候,我改變了for循環從0到5而不是0循環到數量。另外我正在命令行中運行它。如果不存在,我無法運行a.exe。 – chapman

+0

我看到我錯讀了你的問題。它說a.exe正在消失,而不是終端窗口。我很抱歉。 –

+0

啊,這很有道理:) – chapman

-2

a.exe也是病毒的名稱。我懷疑您的計算機的安全軟件正在刪除或隔離該文件,因爲它認爲它是病毒。使用redFIVE的建議將您的輸出文件重命名爲「print.exe」,以便病毒掃描程序不會將其刪除。

+0

我嘗試了redFives建議,但它沒有起作用,我的防病毒軟件會通知我if它是隔離文件。 – chapman

-1

你試試:

gcc -o YOUR_PROGRAM.exe main.c 
+2

習慣上提供評論以及你的「代碼」。 – aliteralmind

-2

您可以通過指定完整的文件路徑(C:對於如\ MyProject的)刪除您的.exe停止防病毒軟件的「路徑將被排除掃描」部分的防病毒軟件。

相關問題