为什么这段代码能在VS 2015中编译通过但在IDEOne上无法编译?

3
#include <stdio.h>

void foo(void);

void foo(int repeatCount) {
    int i;
    for (i = 0; i < repeatCount; i++) {
        printf("\nHello World\n");
    }
}

int  main(int argc, char *argv[]) {
    printf("main");
}

这篇文章主要是关于IT技术的,需要翻译成中文。请注意保留HTML标记,以下是需要翻译的内容:

这个程序意在使用C语言编写,而不是C++。VS中保存的文件是.c文件,IDEOne中配置的程序也是C文件。

函数原型与函数定义不匹配。

然而,在VS 2015中可以编译通过。警告级别为3会给出一个警告。enter image description here


嘿,好问题!不过我不明白你为什么在这里混合使用 [tag:C++]。可能是因为函数重载的特性吧! - gsamaras
我没有混合任何东西。这都是C语言。 - nicomp
1
因为编译器不好。不要使用Visual Studio进行C编程。在你看到2015年的地方,实际上应该是1990年。由于微软的C编译器来自1990年,所以这似乎是营销时出现了一个错字。 - Lundin
@Lundin 如果它实际上是从1990年开始的,那么它应该捕获到这个经典的C错误,但它没有。 - nicomp
也许它只是很糟糕。无论哪种情况,它都不是一个符合标准的编译器。 - Lundin
显示剩余4条评论
1个回答

2

因为VS Studio不符合标准C并且使用自己的编译器。

使用标准C应该会看到类似这样的内容:

gsamaras@gsamaras-A15:~$ gcc -Wall main.c
main.c:5:6: error: conflicting types for ‘foo’
 void foo(int repeatCount) {
      ^
main.c:3:6: note: previous declaration of ‘foo’ was here
 void foo(void);
      ^
main.c: In function ‘main’:
main.c:14:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^

VS使用哪个编译器?

编译器名为Microsoft C/C++ Compiler。cl.exe是一个控制Microsoft C和C++编译器和链接器的工具。您还可以使用其他编译器:Intel C和C++编译器,在安装后自动配置在Visual Studio中。


VS使用哪个编译器?它有何不同之处? - nicomp
@nicomp 已更新。对我来说启动时间很快,希望这能有所帮助! - gsamaras
@nicomp 您不接受的特定原因是什么? - gsamaras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接