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

C语言中如何在未知变量类型时将其初始化为默认零值?

你可以利用C99引入的复合字面量特性,直接将返回值初始化为对应类型的零值,不需要提前知道具体类型,修改成本极低。

只需要修改STACK_POP宏的变量声明行,在声明ret时直接用对应类型的复合字面量初始化即可:

#define STACK_POP(stack) ({\
    typeof(*(stack).data) ret = (typeof(*(stack).data)){0};\
    if ((stack).size) ret = (stack).data[(stack).capacity - (stack).size--];\
    ret;\
})

原理说明

  • 语法(类型){0}是C标准定义的复合字面量写法,对任意可赋值类型(整数、浮点数、指针、结构体等)都生效,会自动将所有位初始化为零值:整数得到0、指针得到NULL、结构体所有成员都会被置零,完全适配你泛型栈的任意类型需求。
  • 修改后ret变量在声明时就完成了初始化,不管栈是否为空都不会出现未初始化的情况,完全可以通过-Wall -Wextra -Werror的编译检查。

注:这个修改的适用范围和你原本的栈实现完全一致,C语言本身不支持数组直接赋值,所以原本的栈也不支持存储数组类型,这个限制和本次修改无关。

内容的提问来源于stack exchange,提问作者Fayeure

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:18:04