语法错误 : 缺少“;”(在“类型”的前面)”—— C语言标准

1、发现问题

最近用VS2010处理一段C代码时发现这样一类错误,源程序如下:

#include 
#include 

int main(int argc, char **argv){
    fprintf(stdout, "Hello C\n");
    for (int i = 0; i < 10; i++){
        fprintf(stdout, "%dst Hello C\n", i);
    }
    getchar();
    return 0;
}

编译时报错如下:

1>  main.c
1>d:\vs_workspace\test\test\main.c(6): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\vs_workspace\test\test\main.c(6): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\vs_workspace\test\test\main.c(6): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
1>d:\vs_workspace\test\test\main.c(6): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\vs_workspace\test\test\main.c(6): error C2065: “i”: 未声明的标识符
1>d:\vs_workspace\test\test\main.c(6): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符
1>d:\vs_workspace\test\test\main.c(6): error C2065: “i”: 未声明的标识符
1>d:\vs_workspace\test\test\main.c(6): error C2059: 语法错误:“)”
1>d:\vs_workspace\test\test\main.c(6): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\vs_workspace\test\test\main.c(7): error C2065: “i”: 未声明的标识符
1>
1>生成失败。

2、分析问题

一开始感觉莫名其妙,去网上查了下才知道,而VS2010的C编译器只支持C89标准,对C99标准支持不完全,而在C89标准中,变量需要放到函数体的前面声明,先声明再使用。

据说VS2013对C99的支持更完善了,已经可以随处声明变量。

现有的三种C语言标准:

  • C89:89年发布,大部分编译器都很好的支持
  • C99:99年发布,gcc很好的支持,微软不太感兴趣的样子
  • C11:新平台也都开始支持

3、解决问题

方法一

#include 
#include 

int main(int argc, char **argv){
    int i;//在函数体前声明
    fprintf(stdout, "Hello C\n");
    for (i = 0; i < 10; i++){
        fprintf(stdout, "%dst Hello C\n", i);
    }
    getchar();
    return 0;
}

方法二

将 .c 文件改成 .cpp 文件

你可能感兴趣的:(C++学习整理)