LoginSignup
0
1

More than 5 years have passed since last update.

C > define多重定義のチェック > 3つまで > #if (defined(USE_CASE0)+defined(USE_CASE1)+defined(USE_CASE2)) != 1 #error "Wrong number of selected cases" #endif

Last updated at Posted at 2016-10-11
動作環境
C++ Builder XE4

Cの実装においてテストデータを試験的に切り替えたい。
#defineは多用したくないが、とりあえず3つの定義をした。

// 以下のいずれかを有効にしてください。
#define USE_CASE0
//#define USE_CASE1
//#define USE_CASE2

上記の場合、2つ以上の定義をされたくない。
({0,1}, {0,2}, {0,1,2}, {1,2})をはねる。

以下とした。

#if !( defined(USE_CASE0) || defined(USE_CASE1) || defined(USE_CASE2) )
#error "Line17: No case is selected"
#endif

#if ( defined(USE_CASE0) && ( defined(USE_CASE1) || defined(USE_CASE2) ) )
#error "Line21: Too many cases selected"
#endif

#if ( defined(USE_CASE1) && defined(USE_CASE2) )
#error "Line25: Too many cases selected"
#endif

もっと綺麗な書き方があるかもしれない。

改良版

@SaitoAtsushi さんによるコメント
に改良コードがあります。

情報感謝です。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1