c - 带有 clang 的宏中未使用的函数

标签 c gcc macros

我有一个定义如下的,即:

#define next_position() (bit ? *str++ : (*str++) & 0xff)

warning: expression result unused [-Wunused-value]

Clang 是说第一个 *str++ 在宏中没有被使用,但是 gcc 从来没有向我显示这个“警告”,是这是一个编译器错误? 我该如何解决?这似乎是一个合理的警告。

最佳答案

Clang 是正确的——您取消了对 str 的引用,但没有使用它的值。 如果你想要的只是推进 str,那么 next_position 将归结为:

#define next_position() str++

这会带来一个问题,为什么您要将 那个 隐藏在宏后面,但那是另一个问题。

至于从 clang 获取警告,而不是从 gcc 获取警告,它们是不同的编译器。他们正在检测代码中重叠但不相同的一组潜在问题,并且他们以不同的方式迂腐。甚至 gcc 本身也会根据优化级别和 gcc 版本产生不同的警告集。一个编译器产生警告而另一个编译器产生警告的事实并不一定意味着编译器中存在错误。它也不会说明您的代码中是否真的存在问题。这只是表明某些可能不正常的迹象。

关于c - 带有 clang 的宏中未使用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633271/

相关文章:

c - C 中文件的冒泡排序

macros - CMake 宏 : how to iterate over arguments

c 宏重复参数

c - OpenMP 中 private() 子句中变量的最大数量

c - 为什么抽卡直到到达 "A Spade"时会输出不同的结果

c - 优化浮点计算

长序列上的 C++ 正则表达式段错误

c++ - 进程创建中的 Wait()

c++ - 错误 : variable or field ‘myfunction’ declared void

c++ - 我的钳位宏有问题