2012-02-13 186 views
3

(目標C代碼)具有相同變量名稱的變量作用域?

int i=5; 
{ 
    int i=i; 
    NSLog(@"Inside Scope: %i",i); 
} 
NSLog(@"Outside Scope: %i",i); 

打印:

3385904(垃圾)


正確更換int i = i;int i= 10;打印...(內部範圍的i

如:

立即

和(僅此代碼)

int i=i; 

編譯,但段錯誤。


這些語法是如何有效的?它們有什麼用處,或者它們是早期應該被捕獲的編譯器錯誤?

是否有任何情況需要在新類型下使用新範圍內的相同變量名稱,以及如何區分?

我唯一的想法可能是for() loop,因爲如果你有兩個循環,編譯器會不高興你重新定義了int i;兩次。

+1

我不確定規範中關於'int i = i;'的內容,但顯然它是無效的。在'{}'裏面定義一個新的'i'是完全合法的,但偶爾也是有用的(儘管可能會引起混淆和錯誤發生)。 – 2012-02-13 17:24:09

+1

我希望你可以設置(或者真的是默認設置),當你在同一個方法中的兩個作用域中使用相同的變量名時,編譯器會拋出一個錯誤。我從來不想這樣做。也許有這樣一面旗幟......哎呀猜猜這是一個問題。 – 2012-02-13 17:46:17

回答

1

因爲您正在重新定義我,您將我設置爲尚未設置的值。

簡單地把這個:

int i=5; 
{ 
    int i=i; 
} 

到這一點:

int i = i; 
//int i=5; 
//{ 
    //int i=i; 
//} 

會給你同樣的不同的結果。這個問題與範圍無關。

+0

第二個segfaults,第一個沒有。他們不完全一樣的情況... – 2012-02-13 19:05:09

相關問題