繁体   English   中英

内联汇编错误中的编译器错误: - C2400:“第二个操作数”中的内联汇编语法错误; 发现'换行'

[英]Compiler Error in inline Assembly error:- C2400: inline assembler syntax error in 'second operand'; found 'newline'

我正在测试一些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定义。

我还想补充一点,这是一个单独的文件,而不是一个项目,所以不能有任何多个声明。

我认为原因可能是因为长度是一个成员函数

MSDN也说:

LENGTH ,SIZE和TYPE运算符在内联汇编中的含义有限。 它们不能与DUP运算符一起使用(因为您无法使用MASM指令或运算符定义数据)。 但您可以使用它们来查找C或C ++变量或类型的大小:

LENGTH运算符可以返回数组中的元素数。 它返回非数组变量的值1。

请看: http//msdn.microsoft.com/en-US/library/wxh0awwe%28v=vs.80%29.aspx

特别

LENGTH,SIZE和TYPE运算符在内联汇编中的含义有限。 它们不能与DUP运算符一起使用(因为您无法使用MASM指令或运算符定义数据)。 但您可以使用它们来查找C或C ++变量或类型的大小:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM