gpt4 book ai didi

C: 宏产生警告 "statement with no effect"

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:57 31 4
gpt4 key购买 nike

我在 C 中有以下代码:

int do_something(void);

#ifdef SOMETHING
#define DO_SOMETHING() do_something()
#else
#define DO_SOMETHING() 0
#endif

此代码在未定义 SOMETHING 的情况下编译时产生警告“statement with no effect”。我正在尝试修复它,但存在一个问题 - 使用此宏的代码有时会检查“返回值”,有时会忽略它。因此,我无法使用最简单的解决方案 - 在宏本身中强制转换为 void。

是否可以编写允许比较“返回值”并且在被忽略时不产生此警告的宏?

我使用 gcc 来编译我的代码。

最佳答案

三种可能的解决方案:

定义一个 do_nothing 函数,它将被 gcc 优化:

int do_something(void);
int do_nothing(void) { return 0; }

#ifdef SOMETHING
#define DO_SOMETHING() do_something()
#else
#define DO_SOMETHING() do_nothing()
#endif

或者,修改 do_something 实现以将 #ifdef 检查移到那里

int do_something(void)
{
#ifndef SOMETHING
return 0;
#endif

// Your implementation here
}

您也可以ignore the warning使用 #pragma 指令。

顺便问一下,你编译的是哪个版本的 gcc 和哪些标志?使用 GCC 4.9 的 gcc -Wall -pedantic 不会产生警告。

关于C: 宏产生警告 "statement with no effect",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565161/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com