为何未实现的函数使用sizeof时不会触发链接错误?
为什么未实现的函数在
sizeof中调用不会触发链接错误? 这是因为sizeof是编译期运算符——它不需要真正执行括号里的表达式,只需要在编译阶段推导表达式的类型,然后返回该类型的大小。
具体到你的场景:
sizeof(hello())里,编译器只会读取hello()的返回值类型为int,直接返回int类型的默认大小(通常是4字节),完全不会生成调用hello函数的代码,自然不需要去链接这个函数的实现。- 同理,
sizeof(world())的返回值类型是char,编译器直接返回char类型的大小(1字节),同样不会触发world函数的调用逻辑。
所以整个编译链接流程中,链接器找不到需要关联hello和world函数的代码引用,也就不会抛出“undefined reference”错误。
你的代码:
#include <stdio.h> int hello(); char world(); int main() { printf("sizeof hello = %zu, sizeof world = %zu\n", sizeof(hello()), sizeof(world())); }
运行结果:
sizeof hello = 4, sizeof world = 1
内容的提问来源于stack exchange,提问作者Nader
相关产品推荐
相关产品推荐

