【发布时间】:2019-11-05 16:56:50
【问题描述】:
在使用 Petsc 编译程序的过程中,我偶然发现了一个类似于以下的构造。据我所知,在 Petsc 中,他们使用它来包装对 MPI 的调用,以便使用集体通信监视对函数的调用。
#include <stdio.h>
int f() {return 0;}
int g() {printf("g()\n");return 0;}
#define STMT ( 0 || g() )
int main()
{
STMT;
printf("main()\n");
return 0;
}
用 gcc 编译:
gcc -Wall -Werror ./test.c
引发以下错误/警告:
./test.c:7:20: error: value computed is not used [-Werror=unused-value]
#define STMT ( 0 || g() )
~~~~~~^~~~~~~~
./test.c:11:3: note: in expansion of macro ‘STMT’
STMT;
^~~~
cc1: all warnings being treated as errors
为什么编译器会发出这个警告?恕我直言 g() 始终执行并且始终使用计算的值。
注意:测试:gcc 版本 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)、gcc 版本 8.3 和 gcc 版本 9
【问题讨论】:
-
“计算值”指的是整个括号表达式,而不仅仅是
g()。 -
看起来您的警告已升级为错误。
标签: c gcc gcc-warning