c++ - 此处不允许使用 'asm' 声明

标签 c++ visual-studio-2019

所以我这里有这段代码,它不允许我编译我的dll,它只是返回上面的错误。

void Math::AngleVectors(const Vector &angles, Vector *forward, Vector *right, Vector *up)
{
    auto SinCos = [](float flRadians, float* pflSine, float* pflCosine)
    {

        __asm
        {
            fld DWORD PTR[flRadians]
            fsincos
            mov edx, DWORD PTR[pflCosine]
            mov eax, DWORD PTR[pflSine]
            fstp DWORD PTR[edx]
            fstp DWORD PTR[eax]
        } // here it says the error "an 'asm' declaration is not allowed here"
    };
[...]
}

我不知道如何解决这个问题,有人知道这里出了什么问题吗?

我的目标是 x86

最佳答案

不幸的是,您无法做您想做的事。出于安全考虑,Visual Studio 2019 中的 lambda 内部不支持内联汇编:

https://learn.microsoft.com/en-us/cpp/overview/cpp-conformance-improvements?view=msvc-160#inline-assembly-code-isnt-supported-in-a-lambda-expression

解释一下答案(很详细),您必须将 asm 放入命名函数中并让 lambda 调用:


void SinCosAsm(float flRadians, float* pflSine, float* pflCosine) {
    __asm
    {
        fld DWORD PTR[flRadians]
        fsincos
        mov edx, DWORD PTR[pflCosine]
        mov eax, DWORD PTR[pflSine]
        fstp DWORD PTR[edx]
        fstp DWORD PTR[eax]
    }
    //...
}

void Math::AngleVectors(const Vector &angles, Vector *forward, Vector *right, Vector *up)
{
    auto SinCos = [](float flRadians, float* pflSine, float* pflCosine)
    {
        SinCosAsm(flRadians, pflSine, pflCosine);
    };
[...]
}

关于c++ - 此处不允许使用 'asm' 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67359409/

相关文章:

c++ - gdb 调用函数 - 如何使用 std::cout 作为参数?

c++ - 为什么在 C++ 中,我不需要取消引用指向数组的指针来访问数组中的项

visual-c++ - Visual Studio 中的 CMake 项目给出标志覆盖警告(命令行警告 D9025 : overriding '/W4' with '/w' )

C++ 正则表达式子匹配未出现

c++ - 编写 C++ 程序压缩/解压缩数据

c# - Windows Phone 8(仅限 C++)- 可以访问设备制造商吗?

sql-server - Visual Studio 2019 - SSDT

c++ - 如何使用标题单元

visual-studio-2019 - 更改 Visual Studio 2019 的搜索引擎

ASP.NET Core 3.1 项目在同一解决方案中引用了 .NET 4.7.2 项目错误 'System.Web.Configuration.WebConfigurationManager'