在使用clang的宏中未使用的功能

时间:2012-09-28 03:38:03

标签: c gcc macros

我有macro定义如下,即:

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

warning: expression result unused [-Wunused-value]

Clang说第一个*str++在宏中未被使用,但gcc从未显示此警告'对我来说,这是一个编译错误吗? 我该如何解决它?这似乎是一个合理的警告。

1 个答案:

答案 0 :(得分:1)

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

#define next_position() str++

这会带来一个问题,为什么你要隐藏背后的,但这是一个不同的问题。

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