C++ 为C数学函数调用MSVC内置/内部函数
对于GCC和Clang,我可以轻松做到:C++ 为C数学函数调用MSVC内置/内部函数,c++,visual-c++,c++11,intrinsics,built-in,C++,Visual C++,C++11,Intrinsics,Built In,对于GCC和Clang,我可以轻松做到: // absolute value inline constexpr int abs(const int number) { return __builtin_abs(number); } inline constexpr long abs(const long number) { return __builtin_labs(number); } inline constexpr long long abs
// absolute value
inline constexpr int abs(const int number)
{ return __builtin_abs(number); }
inline constexpr long abs(const long number)
{ return __builtin_labs(number); }
inline constexpr long long abs(const long long number)
{ return __builtin_llabs(number); }
inline constexpr double abs(const double& number)
{ return __builtin_fabs(number); }
inline constexpr float abs(const float& number)
{ return __builtin_fabsf(number); }
inline constexpr long double abs(const long double& number)
{ return __builtin_fabsl(number); }
这就像一个符咒。我想对几乎每一个数学函数都做类似的事情,并让我的代码在MSVC上运行。我如何为MSVC做与上述相同的工作
编辑:为了清楚起见:问题是关于\uuuu内置*
函数,没有其他问题。我试过了
#pragma intrinsic(abs)
但这需要一个abs函数声明,我不希望在全局名称空间中使用它。内部函数不可移植,因此您必须手动将其添加到列表中,并使用
\ifdef
切换模式
顺便说一下,您不必在全局名称空间中包含abs
,而是包括
,而不是
编译器知道自己的内部函数是什么,MSVC使用它来启用它们。对此有一个响应,链接到MSVC中可用的内部函数:您是否询问Microsoft的编译器是否支持
constepr
?答案是否定的,不是Visual Studio 2010或下一个版本VS 11.IIRC,你甚至不需要这样做-我相信有一个编译器开关,它决定是否使用内置函数而不是库函数?