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.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 <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 文件