語法錯誤 : 缺少“;”(在“類型”的前面)”—— C語言標準

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章