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

MSVC是否存在GCC __attribute__(returns_nonnull)的等价特性?

MSVC对应的非空返回值注解特性

MSVC有等价的特性,通过微软的**SAL(源代码注解语言)**中的_Ret_notnull_注解,就能告诉编译器某个函数永远不会返回NULL,进而触发不必要NULL检查的警告。

用法示例

#include <sal.h>

// 定义示例结构体
typedef struct {} Something;

// 用_Ret_notnull_标注函数,表明返回值永远非空
_Ret_notnull_
Something* MyFunctionThatNeverReturnsNULL()
{
    static Something blah;
    return &blah;
}

int main()
{
    Something* s = MyFunctionThatNeverReturnsNULL();
    if (s) // MSVC会触发C4127警告:条件表达式为常量
    {
        // 执行操作
    }
    else
    {
        // 永远不会执行的分支
    }
}

注意事项

  • 需要包含头文件<sal.h>来使用SAL注解
  • 建议编译时开启/W4级别(该级别下C4127警告默认启用),或者显式指定/w4C4127单独开启这个警告
  • SAL注解还有其他丰富标注,比如_In_notnull_用于标注输入参数非空,可按需扩展使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:53:23