在Windows上的gcc:生成的“a.exe”文件消失

我正在使用GCC版本4.7.1,但我也在GCC 4.8上试过。 这是我想要编译的代码:

#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文件消失。 这不是我的代码给我任何错误。

这里有一个certificate,因为有些人误解了这一点: 证明

Solutions Collecting From Web of "在Windows上的gcc:生成的“a.exe”文件消失"

(由于ahoffer的删除答案不是很正确,我会根据评论中的信息发布。)

在Windows上,gcc默认生成一个名为a.exe的可执行文件。 (在类UNIX系统上,由于历史原因,默认名称是a.out 。)通常,您可以使用-o选项指定一个名称。

显然,生成的a.exe文件会在防病毒软件中产生错误的肯定匹配,因此在创建文件后不久就会自动删除该文件。 我看到你已经联系了Avast的开发人员关于这个误报。

请注意,防病毒程序通常会检查文件的内容 ,而不是其名称,因此使用a.exe以外的名称生成文件将无济于事。 但是,对程序进行一些更改可能会更改可执行文件的内容,以避免出现问题。

你可以尝试编译一个简单的“hello,world”程序来查看是否发生了同样的事情。

感谢Chrono Kitsune在评论中链接到这个相关的Mingw用户讨论 。

这与你的问题没有关系,但你应该在你的程序输出结束时打印一个换行符( '\n' )。 在你的Windows环境中,这可能并不重要,但是一般来说,程序的标准输出应该在其最后一行的末尾总是有一个换行符。

你的代码没有问题,它只是正常退出。

你必须在命令行中运行它,它会显示你所有的信息。

开始 – >运行 – > cmd,然后cd到你的目录。 然后a.exe。 如果你不想这样做,你可以在返回main之前添加一个sleep()。

当你将print(5)传递给你的函数的时候,你的代码还没有被使用。

你试试:

 gcc -o YOUR_PROGRAM.exe main.c 

a.exe也是病毒的名称。 我怀疑您的计算机的安全软件正在删除或隔离该文件,因为它认为它是病毒。 使用redFIVE的建议将您的输出文件重命名为“print.exe”,以便病毒扫描程序不会将其删除。

您可以通过在防病毒软件的“要从扫描中排除的路径”部分指定完整的文件路径(例如:c:\ MyProject)来阻止防病毒软件删除.exe。