web-dev-qa-db-ja.com

C複数のマクロの定義をテストするプリプロセッサ

サイトを検索しましたが、探していた答えが見つかりませんでした。ここに簡単な質問があります。

私はそのようなことをしようとしています:

#ifdef _WIN32 || _WIN64
     #include <conio.h>
#endif

どうすればそのようなことができますか? _WIN32は32ビットウィンドウと64ビットウィンドウの両方に定義されているので、どちらのウィンドウ検出でも問題ありません。プリプロセッサディレクティブでそのような論理演算子を使用できるかどうか、そして使用できる場合は、上記が機能しないため、どのように使用できるかにもっと興味があります。

Gccでコンパイルすると:

警告:#ifdefディレクティブの最後に余分なトークンがあり、基本的に最初のMACROを取得し、残りを無視します。

43
Lefteris

試してください:

#if defined(_WIN32) || defined(_WIN64)
// do stuff
#endif

defined マクロは、名前が定義されているかどうかをテストし、結果に論理演算子を適用できるようにします。

66
Aaron Maenpaa

#ifと特殊演算子を使用する必要があります defined

7
cube

私はそれがこのように可能であるはずだと思います:

#if defined block1 || defined block2 /*or any other boolean operator*/
   /*Code*/
#endif

詳細情報 ここ

4
Fernando Martin

定義された使用:

#if defined(A) || defined(B)
    #include <whatever.h>
#endif
1
ynimous