如果没有header(stdio.h)文件,以下代码如何运行?

时间:2017-06-27 22:10:55

标签: c

如果不包含printf函数的头文件,以下代码如何运行?

int main(){
printf("%d",1);
return 0;}

1 个答案:

答案 0 :(得分:3)

注意:这是一个手写的答案,大致是正确的。知道血腥细节(例如gcc)的其他人可能会启发我们两个人。这是:

因为在C中 - 至少对于某些编译器 - 隐式定义的函数很好。所以它编译它,然后把它交给链接器。它看到对printf的引用,并且由于链接器默认与C运行时库链接,因此它会将该符号解析为正确的函数。

我想像这样的隐式函数会得到一个默认签名,通常期望返回一个int。至于函数的参数,那些在编译时不能进行类型检查,因为编译器不知道实际的函数签名是什么。所以它只会使用标准的调用约定,例如通过寄存器或类似的东西传递参数。