На сколько корректен этот код? - C (СИ)
Формулировка задачи:
Добрый день.
Подскажите как будет воспринимать подобную запись
компилятор?
int main(int argc, char *argv[]) {
const int x = 1;
printf ("%d\n", x);
{
int x[x];
x[0]=111;
printf ("%f\n", x[0]);
}
system ("pause");
return 0;
}Решение задачи: «На сколько корректен этот код?»
textual
Листинг программы
const int x = 1;
{
/* здесь "x" ещё относится к верхней переменной */
int a = 1;
/* До того, как закончено описание данной переменной "x" (т.е. до точки с запятой),
* идентификатор "x" ещё относится к верхней переменной "x", а после точки
* с запятой идентификатор "x" будет относиться к данной переменной.
* Для удобства переименую её в "xx" */
int x[1];
/* Здесь "x" уже относится ко второй переменной "x" */
int *p = xx;
}
Объяснение кода листинга программы
- Задается константа
xсо значением 1. - Внутри блока кода объявляется переменная
aсо значением 1. - В блоке кода объявляется массив
xиз 1 элемента. - В блоке кода объявляется указатель
pна переменнуюxx. - Код внутри блока завершен.