Я работаю над проектом, написанным на C ++, который включает внедрение исходного кода в уже скомпилированный (и работающий) процесс, и поэтому в некоторых случаях мне нужно писать встроенную сборку.Это короткое введение, чтобы избежать каких-либо комментариев, говорящих мне, что встроенная сборка, вероятно, не должна использоваться.
Итак, что касается моего реального вопроса, я обнаружил, что в C ++ есть альтернативные операторы, и некоторые из них, особенно и и или очень напоминают мне Python, язык программирования, который мне очень нравится с точки зрения синтаксиса.
Я знаю, что использование этих альтернативных операторов, конечно, не такв лучших практиках, и его следует избегать, но это личный проект, поэтому читаемость кода для других не слишком беспокоит меня.
Мой проект скомпилирован с помощью компилятора MSVC, и мое первое наблюдение состояло в том, что этиальтернативные операторы, по-видимому, не определены по умолчанию.После небольшого исследования я обнаружил, что одним из способов их включения было включение <ciso646>
.Итак, миссия выполнена, подумал я.
Но при компиляции я обнаружил, что мои встроенные фрагменты сборки теперь вызывают ошибки компиляции, потому что они содержат инструкции asm, такие как или и и .Да, встроенная сборка написана в нижнем регистре.Таким образом, возможный обходной путь будет заключаться в том, чтобы прописать все мои фрагменты встроенной сборки, но так как мне не очень нравится стиль ALL CAPS RAGE STYLE, я спрашиваю здесь, есть ли другой обходной путь для этой проблемы.
Вот пример встроенной сборки, вызывающей проблемы
__declspec (naked) Unit* __fastcall D2CLIENT_GetClientUnit(int nGUID, DWORD dwType)
{
/*
push dwType
mov eax, nGUID & 0x7F
mov edx, ((dwType << 9) + D2CLIENT_6FBBA608)
call D2CLIENT_6FB54E20
*/
__asm
{
push edx
mov eax, ecx
shl edx, 0x09
and eax, 0x7F
add edx, [D2CLIENT_6FBBA608]
call D2CLIENT_6FB54E20
retn
}
}
Спасибо