C語言變數宣告問題——變數定義一定要放在所有執行語句/語句塊的最前面嗎?
參考網址:http://www.cnblogs.com/web-HCJ/p/4468689.html
報錯資訊:error C2065: 'salary' : undeclared identifier
1 2 3 4 5 6 7 8 9 |
#include
<stdio.h>
void main(){
printf ( "我的成績是100分!" ); //不使用變數
int salary; //使用變數
salary
= 100;
printf ( "我的成績是%d分!" ,salary);
return 0;
}
|
問題根源:編譯器問題——C89和C99
C89規定,在任何執行語句之前,在塊的開頭宣告所有區域性變數。
在C99以及C++中則沒有這個限制,即在首次使用之前,可在塊的任何位置都可以宣告變數。
變數宣告放在前面就不報錯了······
1 2 3 4 5 6 7 8 9 |
#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)就可以了
1 2 3 4 5 6 7 8 9 |
#include
<stdio.h>
int main( void ){
int salary; //使用變數
salary
= 100;
printf ( "我的成績是100分!" ); //不使用變數
printf ( "我的成績是%d分!" ,salary);
return 0;
}
|
應該是語言的資料型別的問題吧???是不是呢?大神何處在~
(完,可待續)