程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言變量聲明問題——變量定義一定要放在所有執行語句/語句塊的最前面嗎?,變量最前面

C語言變量聲明問題——變量定義一定要放在所有執行語句/語句塊的最前面嗎?,變量最前面

編輯:關於C語言

C語言變量聲明問題——變量定義一定要放在所有執行語句/語句塊的最前面嗎?,變量最前面


 

報錯信息:error C2065: 'salary' : undeclared identifier

#include <stdio.h>

void main(){
printf("我的成績是100分!");//不使用變量
int salary;//使用變量
salary = 100;
printf("我的成績是%d分!",salary);
return 0;
}

問題根源:編譯器問題——C89和C99

C89規定,在任何執行語句之前,在塊的開頭聲明所有局部變量。

在C99以及C++中則沒有這個限制,即在首次使用之前,可在塊的任何位置都可以聲明變量。

 

變量聲明放在前面就不報錯了······

#include <stdio.h>

void main(){
int salary;//使用變量
salary = 100;
printf("我的成績是100分!");//不使用變量
printf("我的成績是%d分!",salary);
return 0;
}

 

不同風格利弊

變量在函數開頭定義:便於修改

變量就近定義:便於閱讀

變量在塊語句的開頭定義:有的臨時變量放在語句塊開頭,可以不用在函數開頭定義,並且在使用完畢後釋放空間,可以這麼做,但不要無故添加花括號來提高代碼的結構。

 

要達到最大的兼容跨平台性,還是放在函數開頭定義吧

使用哪種方式,看實際情況+個人喜好!

 

我個人是比較喜歡就近定義的,覺得比較方便一點。

可是,現在使用的VC6.0,編譯器可能是C89的,所以不得不用開頭定義。

 

順便提一提:該文件的後綴名為.c

在網上查了一下,有許多說法,列舉一二(意思大同小異)

1.源文件保存為.c格式的話變量只能定義在最前,若保存為.cpp格式的話,變量定義較為靈活,不用在最前。

2.在C語言裡,變量只能在函數的開頭處聲明和定義。在函數裡要用到的變量必須要在開頭處聲明定義。聲明定義的前面不能有任何其他非聲明定義的語句。全局變量在函數體的外部聲明定義。而C++裡(.CPP文件是按C++標准編譯的),只要在用到變量前對該變量進行聲明定義就行了,位置不做特別要求。而C語言的就定了在一個模塊裡(函數、循環體等)先聲明一切所需變量後才能進行相關操作的規定。

 

然而,把後綴名改為.cpp後,還是報錯

 

void main()改為int main(void)就可以了

#include <stdio.h>

int main(void ){
int salary;//使用變量
salary = 100;
printf("我的成績是100分!");//不使用變量
printf("我的成績是%d分!",salary);
return 0;
}

應該是語言的數據類型的問題吧???是不是呢?大神何處在~

(完,可待續)

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved