代码很简单,如下所示:code1:
#include<stdio.h>
void main()
{
int a=0;
printf("c");
int b=1;
printf("q");
}
问题是,当我在Visual C ++ 6.0或Visual Studio 2010中编译此代码时,出现“缺少”错误;我知道错误不是“;”。当我编写类似代码2的代码时没有错误:
#include<stdio.h>
void main()
{
int a=0;
int b=1;
printf("c");
printf("q");
}
但是当我使用gcc或IDE c-free 5编译code1时,它没有问题。
由于Microsoft在其产品中使用的编译器或我不知道的东西,这是一个问题。我不记得任何书都说变量必须放在C文件中。 这些编译器有不同的标准??
答案 0 :(得分:2)
Visual Studio until recently did not have any support for C99但目前支持C99的子集,允许在gcc
中混合代码和声明,如果您使用-std=c90 -pedantic
,您将收到第一个代码示例的警告:
警告:ISO C90禁止混合声明和代码[-Wpedantic]
by default gcc
使用-std=gnu90
,但如果您添加-pedantic
标记,则会看到相同的警告。
同样main
应该返回 int 而不是 void 。
答案 1 :(得分:1)
在Visual C ++ 6.0或Visual Studio 2010中编译此代码时
Visual Studio不符合C标准,特别是不符合该标准的两个最新版本。所以形式上,Visual Studio不是C编译器。这就是你得到奇怪的编译器错误的原因。
但是当我使用gcc或IDE c-free 5编译code1时,它没有问题。
是的,这个代码不会在符合标准的C编译器上编译(对于托管系统)。 GCC正确报告以下错误:
error: return type of 'main' is not 'int' [-Wmain]
答案 2 :(得分:0)
语言gcc
目标与C99有些相关; Microsoft编译器所针对的语言与C89有些相关。
它们是不同的语言,并且有不同的规则。
我相信你可以使微软编译器的行为类似于带有选项的C89编译器(/Za
如果我没有记错的话);并且您可以使用gcc
和-std=c89
选项使-pedantic-errors
表现得像C89编译器;选项-std=c99
和-pedantic-errors
使gcc行为like a C99 compiler。