如何防止 MSVC 用它的 memset 替换我的 memset?

Eat*_*3am 18 c visual-studio uefi

我正在构建 EFI 驱动程序,因此无法使用 stdlib,因此没有 memset。我也在 E​​xitBootServices 之后运行,所以没有 edk2 CopyMem。这是我的功能:

void Set_Memory(VOID* Dest, UINTN Len, CHAR8 Val)
{
    for (int i = 0; i < Len; ++i)
    {
        ((UINT8*)Dest)[i] = Val;
    }
}
Run Code Online (Sandbox Code Playgroud)

当进行优化编译时,我得到了LNK2001 unresolved external symbol memset. 据推测,MSVC 编译器正在用Set_Memorymemset. 我也无法定义我自己的memset,因为我得到了错误C2169 'memset': intrinsic function, cannot be defined。如何在不失去其他优化的情况下防止这种情况发生?

use*_*902 2

使用#pragma optimize("", off)关闭某些功能的优化。

例如:

#pragma optimize("", off)
void Set_Memory(VOID* Dest, UINTN Len, CHAR8 Val)
{
    for (int i = 0; i < Len; ++i)
    {
        ((UINT8*)Dest)[i] = Val;
    }
}
#pragma optimize("", on)
Run Code Online (Sandbox Code Playgroud)

optimize pragma记录在这里