2012-02-13 2 views
3

(Objective C код)Область переменной с тем же именем переменной?

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

Печать:

3385904 (Garbage)


замещающие int i = i; с int i= 10; печатает правильно ... (Внутри прицела i)

Такие, как:

А (Только в этом код)

int i=i; 

компилируется, но сразу же ошибку сегментации.

Как действуют эти синтаксисы? Какое использование они, или они являются ошибками компилятора, которые должны были быть обнаружены ранее?

Есть ли ситуации, когда необходимо использовать одни и те же имена переменных внутри новой области под новым типом и как бы вы дифференцировали?

Мое единственное, что может быть, это for() loop, так как компилятор будет расстроен, вы повторно определяете int i; дважды, если у вас есть две петли.

+1

Я не уверен, что спецификация говорит о 'int i = i;', но явно недействительна. Однако определение нового 'i' внутри' {} 'совершенно законно, и иногда полезно (хотя и потенциально запутанное и подверженное ошибкам). –

+1

Я хочу, чтобы вы могли установить (или действительно, что это было по умолчанию), чтобы компилятор вывел ошибку, когда вы используете одно и то же имя переменной в двух областях в том же методе. Я никогда не хочу этого делать. Возможно, есть такой флаг ... Ой, угадайте, это вопрос. –

ответ

1

Поскольку вы переопределяете i, вы устанавливаете i в значение для себя, которое еще не установлено.

Просто поворачивая это:

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

в этом:

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

даст вам те же самые разнообразные результаты. Эта проблема не имеет ничего общего с областью применения.

+0

Второй - segfaults, первый - нет. Это не совсем такая же ситуация ... –

Смежные вопросы