簡體   English   中英

在C中聲明變量-很多方法嗎?

[英]Declare variable in C - Many ways?

我正在和朋友討論在for循環中在C中聲明某些變量的正確方法是什么。

他有一個我不記得的編譯器,還有一個Dev-C ++。

他是這樣的:

for (int i = 0; i<10; i++)
// ... and it works

我做:

int i;
for (i = 0; i<10; i++)
// ... and it works

如果我像他那樣做,Dev-C ++會給我一個錯誤。 技術上正確的方法是什么? 我被教導要按照我的方式去做,但是現在我很困惑,因為他以另一種方式來做,並且對他有用D:

與您的朋友一樣,在循環中聲明變量在C99和C ++中均受支持。 您的朋友很可能來自C ++背景,在這種背景下,這種聲明風格是很規范的。 像您一樣,在循環外聲明循環變量在舊的C語言(例如C89)中是正確的,這顯然是編譯器支持的。

如果您可以使用C99編譯器,那么選擇哪種樣式通常是一個優先選擇的問題。 經驗豐富的C程序員不介意在循環體外部聲明變量,但是在內部聲明它們被認為更干凈一些,因為它將變量的范圍限制在最小可能的詞法區域內。 如果您打算在循環完成后使用它,則在循環體外部聲明變量當然是必要的,例如,檢查循環進行了多遠。

根據您使用的C版本。 Ansi C(原始Ritchie和Kernighan)僅在塊的開頭支持聲明,而現代C(以及任何C ++風格)允許混合使用語句和聲明。

{ 
   int a;
   printf ("Stuff);
   int b; /* not allowed */
}

在for-loop標頭中聲明一個值會導致任何早於c99的編譯器出錯。 如果使用c99標准或更高版本進行編譯,它將可以正常工作。

形式上,這兩個之間的物理差異是性能。 將定義放在方括號中后,for可能有更多機會被用作僅寄存器變量。 但是另一方面,在編譯器的分析機制的幫助下,還有許多其他因素可以決定優化結果的細節。 因此,最終結果可能沒有什么不同甚至相反。 確實有一個肯定的區別:如果在“ for”之后的方括號內定義變量,則該變量將無法在該for循環的外部使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM