源代码如下(example1.c):
int main(int __argc,char *__argv[]){
int cr0=5;
__asm____volatile__("movl %%cr0,%0":"=a"(cr0));
return 0;
}
用$ gcc -S example1.c指令编译时出错,
错误信息:error:expected ')' before ':' token
__asm____volatile__("movl %%cr0,%0":"=a"(cr0));
然后把__volatile__去掉后,这段代码就可以编译成功生成汇编代码
我知道volatile的功能是向GCC声明“不要动我所写的InstructionList,我需要原封不动的保留每一条指令”
所以我不明白为什么这段程序无法编译通过,还请高手解惑?
win7系统,虚拟机GCC版本是“GCC:(Ubuntu 4.8.2-19ubuntu1) 4.8.2”