【发布时间】:2014-09-01 14:49:58
【问题描述】:
据我所知,C 中的对象有 3 种类型的链接:1)外部 2)内部和 3)无,并且在块范围内声明的对象,如在函数体内,没有链接,除非前面有关键字“外部”或“静态”。
但是为什么下面的函数声明能够链接到 main() 函数下面的定义,即使我在声明期间没有使用“extern”?请解释一下,因为它颠覆了我对这个话题的全部理解。谢谢。
#include<stdio.h>
int main()
{
int foo(); //working even though I've not used "extern"
printf("%d",foo());
}
int foo()
{
return 8;
}
上述程序的结果:8
【问题讨论】:
-
@sashoalm,“链接”是 C 标准定义的一个术语,它没有说明链接器。这是一种语言功能。
-
因为您从
main()调用该函数,而main()已经知道该函数的原型是什么。 -
@Don'tYouWorryChild,不,它没有,直到
main之后才定义该函数,因此直到在main中声明它之前,对此一无所知
标签: c function declaration extern linkage