Доминирование контрольного потока
Я изучаю компиляторы для личного проекта, и для этого я искал документы из университета в Великобритании. Один из вопросов, на которые я наткнулся, гласит:
Draw a CFG which contains a definition followed by a use of a variable x, but in
which the use of x is not dominated by any definitions of x.
Как это возможно? Если в определении не доминирует определение, это означает, что блок, в котором используется x, будет иметь x вне области видимости? Я не смотрю на это правильно?
Скажем у нас
1: int y = 2;
2: если (у> 0)
3: int x = 5;
4: еще x++;
В этом случае использование x не является доминирующим в определении, но x не входит в область действия, поэтому его нельзя использовать. Я не понимаю...
1 ответ
Имейте в виду, что определение x и его объявление - это две разные вещи, и область видимости касается только объявлений. Учтите следующее:
int x;
if (user_input_integer() == 0) {
x = 0;
} else {
x = 1;
}
x++;