Windows上的gcc:生成的"a.exe"文件消失

cha*_*man 7 c windows gcc

我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

它看起来应该工作,当我编译时......

gcc main.c
Run Code Online (Sandbox Code Playgroud)

编译需要一段时间,生成一个a.exe文件,a.exe文件就会消失.我的代码没有给我任何错误.

这是一个证据的GIF,因为有些人误解了这个: 证明

Kei*_*son 7

(由于ahoffer 删除的答案不太正确,我会根据评论中的信息发布此内容.)

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

显然,生成的a.exe文件会在您的防病毒软件中生成误报匹配,因此该文件会在创建后立即自动删除.我看到你已经联系过Avast的开发者这个误报.

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

您可以尝试编译一个简单的"hello,world"程序,看看是否发生了同样的事情.

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

这与您的问题无关,但您应该'\n'在程序输出结束时打印换行符(\n ).它在Windows环境中可能并不重要,但通常程序的标准输出应该(几乎)总是在其最后一行的末尾有一个换行符.