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

來源:互聯網
上載者:User

標籤:

 

報錯資訊: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;}

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

(完,可待續)

 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.