Ошибка компилятора в встроенной сборке ошибка: - C2400: синтаксическая ошибка встроенного ассемблера в "втором операнде"; найдена "новая строка"
Я тестировал код 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
в другом месте.
Я хотел бы также добавить, что это один файл, а не проект не может быть нескольких объявлений.
2 ответов
смотрите здесь: http://msdn.microsoft.com/en-US/library/wxh0awwe%28v=vs.80%29.aspx
конкретно
операторы длины, размера и типа имеют ограниченное значение в встроенной сборке. Они вообще не могут использоваться с оператором DUP (поскольку невозможно определить данные с помощью директив или операторов MASM). Но вы можете использовать их, чтобы найти размер переменных или типов C или c++:
Я думаю, причина может быть в том, что длина - это функция-член
и MSDN говорит:
на длина, операторы размера и типа имеют ограниченное значение в inline собрание. Их вообще нельзя использовать с оператором DUP (потому что вы не можете определить данные с директивами или операторами MASM). Но вы можете используйте их, чтобы найти размер переменных или типов C или c++:
в длина оператор может возвращать количество элементов в массиве. Он возвращает значение 1 для non-массив переменных.