我在Linux上使用英特尔编译器来处理以下小型测试用例。
void a() {
__asm xor rax,rax
}
void b() {
b();
}
如果用icpc编译我会收到错误。
a_s.c(3): (col. 22) error: Unknown opcode ^ in asm instruction.
如果用icc编译,那么一切都OK。所以它以某种方式连接到C ++方言。
如果我用xor rax,rax
覆盖{ }
(即{xor rax,rax}
),那么icpc就会开始编译而没有问题。
如果我尝试使用g ++(我不知道MS风格的asm是怎么回事)我也会看到关于" ^"令牌。
bash-3.2$ g++ a_s.c
a_s.c: In function 'void a()':
a_s.c:3: error: expected `(' before '^' token
a_s.c:3: error: expected primary-expression before '^' token
这是英特尔C ++编译器或某些C ++标准中的错误,禁止使用内联asm这样的方式没有大括号吗?
谢谢。