过去,我被教导C ++编译器一般可以编译C语言代码,除了混合C和C ++代码。 但是,我遇到了一个我无法在this code
中理解的错误此代码可以由GCC的C语言编译器编译,但由于44|error: expected unqualified-id before ‘xor’ token|
函数中的crc_update
错误,GCC的C ++编译器无法编译此代码。
static uint16_t crc_update(uint16_t crc_in, int incr)
{
uint16_t xor = crc_in >> 15;
uint16_t out = crc_in << 1;
if (incr)
out++;
if (xor)
out ^= CRC_POLY;
return out;
}
导致此错误的原因是什么?
答案 0 :(得分:8)
虽然很少使用,但xor
是keyword in C++,可用作^
的替代方案。您不能将其用作变量名称。
答案 1 :(得分:6)
有人试图标准化常用运营商的名称。引用C标准(C11 7.9),这些是:
and &&
and_eq &=
bitand &
bitor |
compl ~
not !
not_eq !=
or ||
or_eq |=
xor ^
xor_eq ^=
在C中,您可以使用左列中的名称作为相应运算符的等效名称,但前提是您包含<iso646.h>
。但是,在C ++中,左栏中的所有内容都是保留关键字。
因此,您应该避免在C和C ++中将它们用作变量名。
答案 2 :(得分:3)
xor
是C ++中的reserved word(但不是C语言)。