Как добавить более одной встроенной инструкции по сборке в макрос с помощью VC ++? - PullRequest
2 голосов
/ 11 августа 2011

Почему следующий макрос компилируется с 1 встроенной инструкцией по сборке, а не с 2?

Этот код компилируется ОК:

#define foo(x,output,ctx) {\
    __asm\
    {\
        mov eax, 0xCAFEBEE1\
    }\
} 

но этот код выдает ошибку:

#define foo(x,output,ctx) {\
    __asm\
    {\
        mov eax, 0xCAFEBEE1\
        add eax, 5\
    }\
}

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Если у вас есть проблемы с препроцессором, обязательно используйте Project + Properties, C / C ++, Preprocessor, Preprocess to file = Yes. Сборка, и вы найдете .i файл в каталоге сборки. Который показывает это в вашем фрагменте:

int wmain(int argc, _TCHAR* argv[])
{
    { __asm { mov eax, 0xCAFEBEE1 add eax, 5 }};
    return 0;
}

Теперь очевидно, что на макро-линиях нет окончаний строк. Прокляни немного за препроцессор, чтобы тебе стало лучше. Затем один __asm ​​на строку для исправления.

1 голос
/ 11 августа 2011

Попробуйте это:

#define foo(x,output,ctx) {\
    __asm mov eax, 0xCAFEBEE1 \
    __asm add eax, 5\
}
...