You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何未实现的函数使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:15:31