我正在使用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,因为有些人误解了这一点:
(由于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。