1

基本的に私は次のことをしたい:

#define TYPE float

int main()
{
  if (TYPE==float)...;
}

もちろん、それは機能しません。また、それを達成する方法もわかりません。

4

3 に答える 3

7

C プリプロセッサの文字列化演算子を使用できます

 #define xstr(s) str(s)
 #define str(s) #s

 if (strcmp(xstr(TYPE), "float") == 0) ...

この説明については、こちらを参照してください

于 2013-03-12T20:59:00.467 に答える
7

プラットフォームに依存しないメカニズムを探している場合、基本的にはありません。*

実行可能なアプローチは次のようなものです。

#if USE_FLOAT
#define TYPE float
#else
#define TYPE blah
#endif

...

int main() {
    if (USE_FLOAT) {
       ...
    }
}

ただし、原則として、マクロに基づく条件付きコンパイルは可能な限り避ける必要があります。


*まあ、@Barmarの洗練された解決策があることがわかりましたが、それはかなり重いランタイムチェックだと思います...

于 2013-03-12T20:56:20.407 に答える
2

を使用__builtin_types_compatible_p()して、2 つのタイプに互換性があるかどうかを確認できます。

if (__builtin_types_compatible_p(TYPE, float)) ...;

これは、GCC と Clang の両方でサポートされています。

于 2013-03-12T20:58:19.300 に答える