我正在使用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
文件消失。我的代码没有给我任何错误。
这是一个证据的GIF,因为有些人误解了这个:
答案 0 :(得分:7)
(由于ahoffer的deleted answer不太正确,我会根据评论中的信息发布此内容。)
在Windows上,gcc默认生成名为a.exe
的可执行文件。 (在类UNIX系统上,出于历史原因,默认名称为a.out
。)通常,您使用-o
选项指定名称。
显然,生成的a.exe
文件会在您的防病毒软件中生成误报,因此该文件会在创建后立即自动删除。我看到你已经contacted Avast的开发人员对这种误报了。
请注意,防病毒程序通常会检查文件的内容,而不是其名称,因此生成名称不是a.exe
的文件将无济于事。但是,对程序进行一些更改可能会更改可执行文件的内容,以避免出现问题。
您可以尝试编译一个简单的“hello,world”程序,看看是否会发生同样的事情。
感谢Chrono Kitsune在评论中链接到this relevant Mingw-users discussion。
这与您的问题无关,但您应该在程序输出结束时打印换行符('\n'
)。它在Windows环境中可能并不重要,但一般来说程序的标准输出应该(几乎)总是在最后一行的末尾有一个换行符。
答案 1 :(得分:3)
尝试使用gcc编译,但不使用以下所有标准库:
gcc -nostdlib -c test.c -o test.o; gcc test.o -lgcc -o test.exe
一个mingw库二进制文件必须生成一个误报,知道哪个库将是有用的。
答案 2 :(得分:2)
您的代码没有问题,只是正确退出。
您必须在命令行中运行它,它将显示所有信息。
start-&gt; run-&gt; cmd,然后cd
到您的目录。然后是a.exe。如果您不想这样做,可以在main中返回之前添加sleep()。
此外,在您的代码中,当您将print(5)
传递给您的函数时,它还没有被使用。
答案 3 :(得分:0)
我确认是由于防病毒引起的。
我做了这个测试:
在t = 0时编译helloworld.c;
1秒钟之内告诉McAfee不要将helloworld.exe视为威胁。 >>文件仍然存在
如果我太慢,该文件将被删除。
答案 4 :(得分:-1)
你试试:
gcc -o YOUR_PROGRAM.exe main.c
答案 5 :(得分:-1)
如果假设您在运行文件时在a.exe附近收到错误消息, 然后执行以下步骤: 1.开放式病毒与威胁防护 2.在病毒和威胁防护设置中选择管理设置 3.有实时保护和云交付保护先开启然后关闭,实时保护和云交付保护。
答案 6 :(得分:-2)
a.exe也是病毒的名称。我怀疑您的计算机的安全软件正在删除或隔离该文件,因为它认为它是病毒。使用redFIVE的建议将输出文件重命名为&#34; print.exe&#34;这样病毒扫描程序就不会删除它。
答案 7 :(得分:-2)
您可以通过在防病毒软件的“扫描排除路径”部分中指定完整文件路径(例如:c:\ MyProject)来阻止您的防病毒软件删除您的.exe。