我测试了一些C代码,发现了一个奇怪的编译器错误
下面的代码不会编译
#include<stdio.h>
void main()
{
int length=6;
__asm
{
mov eax,length
}
}
Visual报告以下错误
test.c(7) : error C2400: inline assembler syntax error in 'second operand';
found 'newline'
但是,我注意到如果我将变量的名称更改为其他东西--比如lengths
--那么一切都很好,下面的代码编译起来没有任何困难
#include<stdio.h>
void main()
{
int lengths=6;
__asm
{
mov eax,lengths
}
}
我尝试过其他编译器,如Digital和Intel,但是到处都无法编译第一段代码。
有什么问题吗?在其他地方是否有length
的另一个定义。
我还想补充一点,这是一个单一的文件,而不是一个项目,所以不可能有任何多个声明。
发布于 2013-11-18 17:42:05
见此处:http://msdn.microsoft.com/en-US/library/wxh0awwe%28v=vs.80%29.aspx
具体来说
长度、大小和类型运算符在内联程序集中的意义有限。它们不能与DUP运算符一起使用(因为您不能用MASM指令或运算符定义数据)。但是您可以使用它们来查找C或C++变量或类型的大小:
https://stackoverflow.com/questions/20054124
复制相似问题