error: unsequenced modification and access to <argument>
error: unsequenced modification and access to <argument>
在此代码中:
#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编译它时,没有产生错误。
我在这里看到了这个问题 但答案实际上并没有帮助。所以我不明白,为什么会这样?这个错误是什么意思?
那是因为您试图修改 SHIFT
定义中的第一个参数 value
。尝试修改宏如下:
#define SHIFT(value,num_of_bits) ((num_of_bits) > 0) ? \
((value) << (num_of_bits)) : ((value) >> (-(num_of_bits)))
在此代码中:
#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编译它时,没有产生错误。
我在这里看到了这个问题
那是因为您试图修改 SHIFT
定义中的第一个参数 value
。尝试修改宏如下:
#define SHIFT(value,num_of_bits) ((num_of_bits) > 0) ? \
((value) << (num_of_bits)) : ((value) >> (-(num_of_bits)))