2012-02-13 17 views
3

(Objective Cのコード)同じ変数名の変数スコープ?

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

プリント:

3385904(ごみ)を正しくint i= 10;プリントでint i = i;を交換


...(スコープのiインサイド)

ような:直ちに

と、(単独で、このコード)

int i=i; 

コンパイルが、セグメンテーション違反。


これらの構文はどのように有効ですか?どのようなものが使用されているのですか、それとも以前にキャッチされていたはずのコンパイラのバグですか?

新しいタイプの新しいスコープ内で同じ変数名を使用する必要がある場合、どのように区別しますか?

2つのループがある場合は、int i;を2回再定義しているため、コンパイラが動揺してしまう可能性があるので、唯一の考えはfor() loopです。

+1

スペックは 'int i = i;'について何を言っているのか分かりませんが、明らかに無効です。しかし、 '{} 'の中に新しい' i'を定義することは完全に合法ですが、時には便利です(潜在的に混乱しやすく、バグがありがちですが)。 –

+1

同じメソッド内の2つのスコープで同じ変数名を使用すると、コンパイラがエラーをスローするように設定することができます(または実際はデフォルトであることを望みます)。私はそれをしたくない。おそらくそのような旗があります...おっとそれは疑問です。 –

答えて

1

iを再定義しているため、iをまだ設定されていない値に設定しています。この中

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

:単純にこの回す

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

はあなたと同じ多様な結果が得られます。この問題はスコープとは関係ありません。

+0

2番目のsegfaults、最初のものはありません。彼らはまったく同じ状況ではありません... –