我有一个macro
定义如下,即:
#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 版本产生不同的警告集。一个编译器产生警告而另一个编译器产生警告这一事实并不一定意味着编译器中存在错误。它也没有说明您的代码是否真的存在问题。这只是一个迹象,表明某些事情可能会发生。