Error C4668 : 没有将“__has_feature”定义为预处理器宏,用“0”替换“#if/#elif”

📅 2026/7/27 18:18:11
Error C4668 : 没有将“__has_feature”定义为预处理器宏,用“0”替换“#if/#elif”
UE5源码在编译时如遇到下边的错误Detected compiler newer than Visual Studio 2022, please update min version checking in WindowsPlatformCompilerSetup.h 10ConcurrentLinearAllocator.h(31): Error C4668 : 没有将“__has_feature”定义为预处理器宏用“0”替换“#if/#elif” 10ConcurrentLinearAllocator.h(31): Error C4067 : 预处理器指令后有意外标记 - 应输入换行符原因是因为编译的过程中没有找到__has_feature宏而这个是 MSVC 中的宏。发现14.36.32532与14.38均在\VC\Tools\MSVC\14.42.34433\include\sanitizer\common_interface_defs.h第 20 行有这个宏。但是我的14.42.34433却没有这个宏将MSVC工具库回退到包含宏定义的版本就行注意按上面的回退之后我手动将UE5.sln中的包含库目录改成需要的版本发现编译还是用的原来的库最后在MSVC目录里发现任然存在14.42版本的库可能在某个流程中会自动检测msvc的高版本吧具体也不清楚最后我是手动删除14.42的库再运行虚幻的GenerateProjectFiles.bat脚本重新生成解决方案然后编译就对了。补充上面修改VS包含库的方式没用因为UE没走VS那套MSBuild而是UnrealBuildToolBuildTool编译脚本会主动查找MSVC和windows SDK版本配置配置没指定就去遍历实际路劲自动用最新版本。下面附上配置C:\Users\xxx\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml?xml version1.0 encodingutf-8 ?Configuration xmlnshttps://www.unrealengine.com/BuildConfigurationWindowsPlatformCompilerVisualStudio2022/CompilerCompilerVersion14.36.32532/CompilerVersionWindowsSdkVersion10.0.22621.0/WindowsSdkVersion/WindowsPlatform/Configuration