C標準的問題
C89規定,在任何執行語句之前,在塊的開頭聲明所有局部變量。
即應該如下:定義變量只能在最開始,scanf等執行語句之前
int N = 0;double sum = 0;scanf("%d",&N);
在C99以及C++中則沒有這個限制,即在首次使用之前,可在塊的任何位置都可以聲明變量。
如下:
int N = 0;scanf("%d",&N);double sum = 0;
另一方面,編譯器不同也不同,gcc編譯器有很多擴展的功能,可完美支持C99標準。
關于變量的定義:
以花括號{}給包圍起來的代碼段稱為block,只要在block開始的地方定義變量就不會錯;
變量作用域和生存期:
該變量的作用域和生存期(除了static限定)只在該block里,且該變量可以屏蔽block外的變量;
譬如在block外已經有一個變量名為a = 1的int變量,在block里允許定義一個同名的變量int a = 2,但在block里試著用printf打印的話,會發現printf("%d", a)結果是2.這就叫做屏蔽外面的變量!
本文為摘抄筆記,原創請查看
https://wenku.baidu.com/view/d3adc6d03186bceb19e8bb6a.html