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
相关产品推荐
相关产品推荐

