在C++中,我们可以用“nodiscribe”来修饰我们的返回类型,如果结果未被使用,它会触发编译器警告。
这对于强制执行错误代码特别有用
auto dont_forget_to_check = do_something_important();
assert(dont_forget_to_check);
这样的东西存在于C?
在C++中,我们可以用“nodiscribe”来修饰我们的返回类型,如果结果未被使用,它会触发编译器警告。
这对于强制执行错误代码特别有用
auto dont_forget_to_check = do_something_important();
assert(dont_forget_to_check);
这样的东西存在于C?
3条答案
按热度按时间vngu2lb81#
没有标准的方法来做到这一点,但gcc确实支持
warn_unused_result
属性。编译器输出:
pkwftd7m2#
这样的东西存在于C?
还没有,但可能在C2x。
C++11样式属性语法和
nodiscard
、maybe_unused
、deprecated
和fallthrough
属性。pbpqsu0x3#
从C23开始,你可以在函数、结构、联合和枚举上使用
[[nodiscard]]
属性。我用GCC 13和Clang 16测试了它,用
-std=c2x
或-std=gnu2x
编译。第二个例子在从函数返回S* 时没有警告。
不需要警告选项。警告可以用
-Wno-unused-result
来抑制,Clang也可以用-Wno-unused
来抑制。如果你想写一个宏,当使用的C标准低于C23时,用gcc属性替换它,你可以测试
__STDC_VERSION__ < 202000
。