Lin*_*umz 5 c++ visual-c++ c-preprocessor
MSVC 2019 添加了一个新的_udiv128()内在(文档),我想在我的 C++ 代码中使用它。然而,该内在函数目前在 clang-cl 9.0.0 和英特尔 C++ 编译器 2019 中均不可用,即使这些编译器的设置_MSC_VER=1920与 MSVC 2019 一样。
由于这个问题,下面的代码不能同时使用 clang-cl 和 icl 编译:
#include <immintrin.h>
#if _MSC_VER >= 1920
uint64_t res = _udiv128(a, b, c, &d);
#endif
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以使用预处理器检测 MSVC,而不检测 clang-cl、icl、...我想避免检查_MSC_VER然后排除所有其他 C/C++ Windows 编译器。
理想情况下,我想使用 Microsoft 特定的宏来检测 MSVC,该宏仅针对 MSVC 而不是针对 clang-cl、icl...
我不能代表英特尔编译器说话。
Clang-cl 的定义是_MSC_VER因为它试图成为 MSVC 编译器的直接替代品,并使用编译器附带的 MS 库(例如,C RTL 和 C++ 标准库)。这些库的实现依赖于_MSC_VER,所以 clang-cl 并没有真正的选择。
选项:
塞瓦的评论建议对你有用。我知道这不是您首选的解决方案,但它是一种选择。您可以在一处进行测试,这样当情况改善时只需更新一处。
尝试使用-fms-compatibility-versionclang-cl 标志来选择旧版本。(如果您不提供此标志,clang-cl 会尝试发现您的 MSVC 安装,然后将兼容性标志与该安装库进行匹配,这可能就是您看到 1920 的原因。)这将阻止您触发#if _MSC_VER >= 1920,但是如果系统库的某些部分需要 1920 或更高版本,则可能会产生副作用。
等待 clang-cl 实施_udiv128()。更好的是,提出一个补丁以更快地完成它。
| 归档时间: |
|
| 查看次数: |
614 次 |
| 最近记录: |