基本的に私は次のことをしたい:
#define TYPE float
int main()
{
if (TYPE==float)...;
}
もちろん、それは機能しません。また、それを達成する方法もわかりません。
基本的に私は次のことをしたい:
#define TYPE float
int main()
{
if (TYPE==float)...;
}
もちろん、それは機能しません。また、それを達成する方法もわかりません。
C プリプロセッサの文字列化演算子を使用できます。
#define xstr(s) str(s)
#define str(s) #s
if (strcmp(xstr(TYPE), "float") == 0) ...
この説明については、こちらを参照してください
プラットフォームに依存しないメカニズムを探している場合、基本的にはありません。*
実行可能なアプローチは次のようなものです。
#if USE_FLOAT
#define TYPE float
#else
#define TYPE blah
#endif
...
int main() {
if (USE_FLOAT) {
...
}
}
ただし、原則として、マクロに基づく条件付きコンパイルは可能な限り避ける必要があります。
を使用__builtin_types_compatible_p()
して、2 つのタイプに互換性があるかどうかを確認できます。
if (__builtin_types_compatible_p(TYPE, float)) ...;
これは、GCC と Clang の両方でサポートされています。