我希望看到我的代码(C++)中所有忽略函数返回值的地方.我如何做到这一点——使用gcc或静态代码分析工具?

错误代码示例:

int f(int z) {
    return z + (z*2) + z/3 + z*z + 23;
}


int main()
{
  int i = 7;
  f(i); ///// <<----- here I disregard the return value

  return 1;
}

请注意:

  • 即使函数及其使用在不同的文件中,它也应该可以工作
  • 百台静电点检工具

推荐答案

你想要GCC的warn_unused_result属性:

#define WARN_UNUSED __attribute__((warn_unused_result))

int WARN_UNUSED f(int z) {
    return z + (z*2) + z/3 + z*z + 23;
}

int main()
{
  int i = 7;
  f(i); ///// <<----- here i disregard the return value
  return 1;
}

try 编译此代码会产生:

$ gcc test.c
test.c: In function `main':
test.c:16: warning: ignoring return value of `f', declared with
attribute warn_unused_result

你可以在Linux kernel中看到这个正在使用;他们有一个做同样事情的__must_check宏;看起来你需要GCC 3.4或更高版本才能工作.然后,您将发现内核头文件中使用了该宏:

unsigned long __must_check copy_to_user(void __user *to,
                                        const void *from, unsigned long n);

C++相关问答推荐

在CIL中运行时,sscanf返回0

代码打印正确输出次数过多(CS50)

生成C代码时自动复制/生成' tmwtypes.h '依赖项

CC crate 示例不会与C函数链接

为什么已经设置的值在C中被重置为for循环条件中的新值?

为什么PLT表中没有push指令?

在一个小型玩具项目中实现终端历史记录功能

C++中矢量类型定义和数据保护的高效解决方案

为什么我的Hello World EFI程序构建不正确?

理解bzip2的BZ2_解压缩函数中的状态重新分配

从不兼容的指针类型返回&&警告,但我看不出原因

将非连续物理内存映射到用户空间

如何修复我的qsort()算法?它每次都给出不同的结果

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

try 判断长整数是否为素数

如果类型是新的,offsetof是否与typeof一起工作?

指向返回 struct 成员的指针,安全吗?

#define X Defined(Y) 是有效的 C/C++ 宏定义吗?

子进程不会修改父进程中的统计信息

C11 嵌套泛型