我正在开发一个用C ++编写的项目,它涉及将源代码注入已编译(并运行)的进程,因此在某些情况下,我需要编写内联汇编。这个简短的介绍是为了避免任何评论告诉我内联汇编可能不应该被使用。
所以,就我的实际问题而言,我发现C ++有其他操作符,其中一些,特别是和,或提醒我一个很多Python,我发现在语法方面非常令人愉快的编程语言。
我知道使用这些替代操作员肯定不是最佳实践,应该避免,但这是一个个人项目,因此其他人的代码可读性并不会让我感到烦恼。
我的项目是用MSVC编译器编译的,我的第一个观察是默认情况下似乎没有定义这些替代运算符。经过一点research后,我发现启用它们的一种方法是包含<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
}
}
由于