小编Sya*_*har的帖子

具有bool返回值的函数,仅设置整个寄存器的1个字节

我有以下代码片段,它是api(cdecl)的一部分.在MSVC++中,sizeof bool是1个字节,但由于bool是实现定义的,其他编译器/作者编译的一些程序错误地定义了函数签名,可能将bool视为> 1个字节,并且调用下面的检查可能会在程序的一侧返回true.

virtual bool isValid()
{
    return false;
    // ^ code above in asm: xor al, al
}
Run Code Online (Sandbox Code Playgroud)

为了避免这种情况,我xor eax, eax在返回之前放了一个内联asm - 但是我觉得它有点hacky,当然由于缺少内联汇编程序支持而无法在x64上运行.

使用#define bool int将工作,但它不是我想要的,因为我有在其中有bool数据类型的结构,并使用它将导致损坏.

有没有像内在函数可以归零eax/rax寄存器或任何可以解决这个问题的东西?

c++ assembly visual-c++

1
推荐指数
1
解决办法
144
查看次数

标签 统计

assembly ×1

c++ ×1

visual-c++ ×1