我正在测试一些C代码并遇到了这个奇怪的问题 编译错误
以下代码无法编译
#include<stdio.h>
void main()
{
int length=6;
__asm
{
mov eax,length
}
}
Visual Studio报告以下错误
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 Mars和Intel Compiler等其他编译器,但无法编译第一个代码。
可能是什么问题?是否有其他地方length
的定义。
我还想补充一点,这是一个单独的文件,而不是一个项目 不能有任何多重声明。
答案 0 :(得分:8)
我认为原因可能是因为length是一个成员函数
同样MSDN说:
LENGTH ,SIZE和TYPE运算符在内联中的含义有限 部件。它们不能与DUP运算符一起使用(因为 您无法使用MASM指令或运算符定义数据)。但是你可以 使用它们来查找C或C ++变量或类型的大小:
LENGTH 运算符可以返回数组中的元素数。它 返回非数组变量的值。
答案 1 :(得分:7)
见这里:http://msdn.microsoft.com/en-US/library/wxh0awwe%28v=vs.80%29.aspx
特别是
LENGTH,SIZE和TYPE运算符在内联汇编中的含义有限。它们不能与DUP运算符一起使用(因为您无法使用MASM指令或运算符定义数据)。但您可以使用它们来查找C或C ++变量或类型的大小: