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

C23标准中是否存在__attribute__((nonnull))的等效机制?

标准C中指定非空指针的方法及C23相关进展

一、标准C中的现有非空约束方式

目前标准C里仅有一种有限的方式能对指针非空进行约束:

  • C99的static数组参数语法:在函数参数声明中,使用void foo(int s[static 1])这类写法,可指定该参数必须指向至少包含1个元素的数组首元素。此时传递空指针作为参数属于约束违反,编译器可检测并报告问题。
  • 但这种方式存在明显局限:
    • 仅适用于函数参数,无法用于函数返回值、全局/局部变量或结构体/联合体成员的非空指定;
    • 约束范围不止空指针——传递指向数组最后一个元素之后的指针同样属于约束违反,即便该指针非空;
    • 标准不允许使用static 0的写法。

除此之外,标准C中没有其他语法或属性能直接指定指针不能为空,像编译器实现的__attribute__((nonnull))属于非标准扩展,不具备跨编译器的通用性。

二、C23的相关情况

在C23标准的属性章节中,并未纳入[[nonnull]]这类通用非空指定属性,仅包含以下标准属性:
[[deprecated]]、[[fallthrough]]、[[maybe_unused]]、[[nodiscard]]、[[noreturn]]、[[_Noreturn]]、[[reproducible]]、[[unsequenced]]。

截至目前,C23也没有针对通用非空指针指定方向的标准化提案落地。

补充说明

此前有类似问题确认__attribute__((nonnull))并未被C标准标准化,但该问题未覆盖当前关于标准替代方案及C23进展的疑问。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:20:02