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

来源:互联网 发布:门户网站源码下载 编辑:程序博客网 时间:2024/06/06 19:25

1、发现问题

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

#include <stdio.h>#include <stdlib.h>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.c1>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 <stdio.h>#include <stdlib.h>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 文件

0 0
原创粉丝点击