Итак, AFAIK, вы можете объявить имя в C столько раз, сколько хотите, но вы не можете переопределить имя более одного раза. Кроме того, согласно тому, что я думаю, декларация - это когда вводится имя. Это когда, скажем, компилятор добавил бы это имя в таблицу символов. Определение - это когда память выделяется для имени. Теперь здесь снова объявляется имя p . Это не определяется снова.
#include <iostream>
#include <cmath>
float goo(float x)
{
int p = 4;
extern int p;
cout << p << endl;
return floor(x) + ceil(x) / 2;
}
int p = 88;
Но я получаю следующую ошибку:
iter.cpp: In function ‘float goo(float)’:
iter.cpp:53:16: error: redeclaration of ‘int p’
extern int p;
^
iter.cpp:52:9: note: previous declaration ‘int p’
int p = 4;
По моему мнению, int p = 4;
должен выделить память для p в стеке вызовов, то есть ввести новую локальную переменную. Затем extern int p должен снова объявить p. Теперь p должно ссылаться на глобальную переменную p, и это p следует использовать во всех последующих операторах функции goo.