在过去,我被教导C++编译器一般可以编译C语言代码,除了混合C和C++代码.但是,我在这段代码中遇到了一个我无法理解的错误
该代码可以通过GCC的C语言编译器编译,但是GCC的C++编译器不能编译,因为下面这个错误代码,44|error: expected unqualified-id before ‘xor’ token| 在crc_update函数.
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;
}
Run Code Online (Sandbox Code Playgroud)
是什么导致了这个错误
虽然很少使用,但是C++中xor的关键字可以用作替代^.您不能将其用作变量名称.
有人试图标准化常用运营商的名称.引用C标准(C11 7.9),它们是:
and &&
and_eq &=
bitand &
bitor |
compl ~
not !
not_eq !=
or ||
or_eq |=
xor ^
xor_eq ^=
Run Code Online (Sandbox Code Playgroud)
在C中,您可以使用左列中的名称作为相应运算符的等效名称,但仅限于您包含的名称<iso646.h>.但是,在C++中,左列中的所有内容都是保留关键字.
所以你应该避免在C和C++中使用它们作为变量名.
请参阅:https://en.wikipedia.org/wiki/C_alternative_tokens