在C++中,我们可以用"[[nodiscard]]"来修饰返回类型,如果结果未使用,则会触发编译器警告.

这对于执行错误代码特别有用

auto dont_forget_to_check = do_something_important();
assert(dont_forget_to_check);

C语言中有这样的东西吗?

推荐答案

没有标准的方法可以做到这一点,但是gcc确实支持warn_unused_result属性.

__attribute__ ((warn_unused_result))
int foo()
{
    return 5;
}

int main()
{
    foo();
    return 0;
}

编译器输出:

[dbush@db-centos7 ~]$ gcc -g -Wall -Wextra -o x1 x1.c
x1.c: In function ‘main’:
x1.c:11:8: warning: ignoring return value of ‘foo’, declared with attribute warn_unused_result [-Wunused-result]
     foo();
        ^

C++相关问答推荐

C/SDL程序,渲染不使用我的渲染器

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

将 struct 变量赋给自身(通过指针取消引用)是否定义了行为?

我无法让LLDB正确运行我的可执行文件

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

调用mProtection将堆栈上的内存设置为只读,直接导致程序SIGSEGV

如何捕捉只有换行符或空格字符缓冲区的边缘大小写

初始变量重置后,char[]的赋值将消失

加密解密工作正常,但返回错误0x80090005

错误Cygwin_Except::Open_stackdupfile:正在转储堆栈跟踪是什么?

如何在提取的索引中分配空值?

使用ld将目标文件链接到C标准库

如何将两个uint32_t值交织成一个uint64_t?

在运行时判断C/C++指针是否指向只读内存(在Linux操作系统中)

与外部SPI闪存通信时是否应禁用中断?

被调用方函数内部的C-Struct变量,它是指针还是无关紧要

Tcl_GetDoubleFromObj在列表的迭代中是一个缺点

根据输入/输出将 C 编译过程分为预处理、编译、汇编和链接步骤

如何使用 raylib 显示数组中的图像

当循环变量在溢出时未定义时,可以进行哪些优化?