2011-09-15 36 views
0

有什麼不同代碼明智之間:的(...)循環索引聲明風格

int i = 0; 
for (i = 0 ; i < n ; i++) 
{ 
} 

​​

也許,如果有更多的循環,它們都使用相同的索引?

而且,是版本相當於先:

int i = 0; 
for (; i < n ; i++) 
{ 
} 

我所知道的優化應該是足夠聰明,至少產生相同的代碼,但理論上有什麼區別?

回答

1

好吧,我想出了爲什麼我們在循環外使用索引聲明。

顯然,我們的Solaris編譯器會給出一個編譯錯誤,像代碼:

for (int i = 0 ; ;); 
for (int i = 0 ; ;); 

的錯誤是:

Error: multiple declaration for i. 
7

在第一種和第三種情況下,int i的範圍超出了for循環。在第二種情況下,作用域爲for循環,如果您想稍後使用它,則必須重新聲明i

是的,只有在前兩行之間沒有放置任何東西時,第一個版本才相當於第三個版本。如果您在兩者之間添加一些代碼,則所有投注都將關閉。

3

'i'的範圍不同。 在情況1中,您可以在循環外訪問它,而在情況2中,您只能在循環內訪問它。在退出循環之後,它將不再存在。

2

第一和第三版本是幾乎相同;與i = 0分配在第1版和初始化在第3版中的小差異。 (對於用戶定義的數據類型,有時會產生很大的差異)。

第二個版本功能相同;然而i作用域for循環內。因此{}完成後無法訪問i。我更喜歡這個版本。

0

第一和第三在所有方面都是相同的。

其次在功能上是相同的,但僅限於for循環中的i範圍(使用範圍)。

0

第一個版本和第三個版本是一樣的。
第二個版本與其他版本不同:我只活在循環範圍內。