为什么这会在VS 2015中编译而不在IDEOne中编译?

时间:2016-05-27 12:18:42

标签: c visual-studio

#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");
}

这是C,而不是C ++。 VS中的文件保存为.c文件,IDEOne中的程序配置为C文件。

原型与功能定义不匹配。

但是,它确实在VS 2015中编译。警告级别3确实发出警告。 enter image description here

1 个答案:

答案 0 :(得分: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 ++编译器。 cl.exe是一个控制Microsoft C和C ++编译器和链接器的工具。您可以使用其他编译器:英特尔C和C ++编译器,安装后在Visual Studio中自动配置。