【问题标题】:Compiler Error in inline Assembly error:- C2400: inline assembler syntax error in 'second operand'; found 'newline'内联汇编错误中的编译器错误:- C2400:“第二个操作数”中的内联汇编语法错误;找到“换行符”
【发布时间】:2013-11-18 17:36:40
【问题描述】:

我在测试一些 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 在别处有其他定义吗?

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

【问题讨论】:

    标签: c visual-c++ compiler-errors


    【解决方案1】:

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

    还有MSDN 说:

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

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

    【讨论】:

    • 但是如果编译器直接通知它而不是显示它找到换行符的神秘错误会更好。
    • 如果您希望编译器捕捉到它,那么您应该向他们建议或将其作为错误提交给 Microsoft connect connect.microsoft.com/VisualStudio
    【解决方案2】:

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

    具体来说

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2011-09-07
      • 2017-05-30
      • 1970-01-01
      相关资源
      最近更新 更多