我遇到过声明定义:
声明是一个定义,除非它声明一个函数而不指定函数的主体
#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
在函数范围内没有表示 global a
。怎么解释?