C Math関数のMSVC Builtin/Intrinsicsを呼び出します
-
28-10-2019 - |
質問
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(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の上記に相当するものを行うにはどうすればよいですか?
編集: :明確さのために:質問はについてです __builtin_*
機能、他に何もありません。私は試した
#pragma intrinsic(abs)
しかし、これにはABS関数の宣言が必要です。これは、グローバルネームスペースにないことを望んでいます。
解決
本質的な関数はポータブルではないので、手動でする必要があります 対応するビルトイン関数を調べます リストに追加して使用します #ifdef
モードを切り替える。
あなたは持っている必要はありません abs
グローバルネームスペースで、ちなみに: <cstdlib>
それ以外の <stdlib.h>
と あなたは得るでしょう std::abs
代わりは。
コンパイラーは自分の内因性が何であるかを知っています、MSVCは使用します /oiスイッチ それらを有効にするため。
所属していません StackOverflow