Я столкнулся с определением объявления:
Объявление является определением, если оно не объявляет функцию без указания тела функции.
#include <stdio.h>
void foo()
{
printf("foo\n");
}
int main()
{
void foo();
foo();
}
В 3.3 сказано
Область действия объявления такая же, как и ее потенциальная область, если только потенциальная область не содержит другое объявление с тем же именем.
Вопрос 1. Означает ли это, что в моем случае, когда мы переобъявили foo в функцию main, переобъявленный foo на самом деле обозначает сущность, отличную от сущности, обозначенной foo, объявленной в глобальной области видимости?
Вопрос 2. Почему неквалифицированное разрешение поиска имени дает объект, обозначенный "глобальным" foo?
UPD: Если учесть следующее
#include <stdio.h>
int a=42;
int main()
{
int a;
printf("%d\n",a); //Garbage
}
Тогда a
внутри области действия функции не относится к глобальному a
. Как это объяснить?