在此代码中:
#include <stdio.h>
#define SHIFT(value,num_of_bits) ((num_of_bits) > 0) ? \
((value) <<= (num_of_bits)) : ((value) >>= (-(num_of_bits)))
int main(void)
{
unsigned int w1 = 0177777u, w2 = 0444u;
printf("SHIFT(w1,5) = %o\tw1 << 5 = %o\n", SHIFT(w1,5), w1 << 5);
return 0;
}
当我使用 clang 进行编译时,我收到以下错误:
错误:无序修改和访问w1
但是当我使用 gcc 编译它时,不会产生任何错误。
我在这里看到了这个问题unsequenced modification and access to pointer,但答案实际上并没有帮助。所以我不明白为什么会发生这种情况?这个错误意味着什么?
答案 0 :(得分:1)
那是因为你试图修改value
定义中的第一个参数SHIFT
。尝试按如下方式修改宏:
#define SHIFT(value,num_of_bits) ((num_of_bits) > 0) ? \
((value) << (num_of_bits)) : ((value) >> (-(num_of_bits)))