目的
ひとつの変数が「1か8か9のとき」みたいな評価(evaluate)をしたいことがある。その変数名が長いと、なんかソースが見づらくなる。変数名は1個だけ書くようにしたい。
手段1、マクロを使う
#define isAorB(x,a,b) (x==a)||(x==b) #define isAandB(x,a,b) (x==a)&&(x==b)
これだと2つしか評価できない。まあ3個用、4個用・・と作っていけば良いっちゃいいが・・。また、C99だとマクロに可変個の引数が使えるので、それでどうにかなるかも?でもC99って変な方向に行ってるし互換性も低いのであまり使いたくない。
手段2、switchを使う
ちょっと見た目がデカくなるのがデメリット。整数値しか使えない。
手段3、短い名前のローカル変数を使う
まあこれでもいいかも。
手段4、関数を使う
これが最もスマートだと思う。
if (anything(g_HogehogeData.m_NullnullData.ErrorCode, 5, ERROR_123456789, ERROR_123460789, ERROR_123056789, ERROR_123456709, ERROR_123456780 ) ) { } bool anything(int target, int num, ...) { int i; va_list list; bool result = false; va_start( list, target ); for (i=0; i
C言語的にはこんな感じになるけども、もっと高級な言語であればジェネリクスを使うと便利だと思う。型に依存しないので。また、foreach文でもいいと思う。