e7.c

絶対に成り立たない?


int max ; int value ;
static void sample1() { /************************************************ 悪い例1 *************************************************/ if(value == 定数1 && 定数0) { /* 処理 ; */ } /************************************************ 修正例1:恐らくやりたい事は次の事。 *************************************************/ if(value == 定数1 || value == 定数0) { /* 処理 ; */ } }
#define KINOU 0 static void sample2() { int i ; /*********************************************** 悪い例:誤動作はしないが、、、、、 *************************************************/ if(1 == 定数 || 2 == 定数){ for( i=0 ; i < CONST1 ; i++ ){ /* 処理 ; */ } } if(3 == 定数){ for( i=0 ; i < CONST2 ; i++ ){ /* 処理 ; */ } } /************************************************************************ 修正例:この場合は下記理由で条件コンパイルが良い。 (a) コンパイル時間が早い (b) LM/OMのDISK消費量が小さい (c) TEXT部のメモリサイズが小さい。 (d) 実行時間が早い(最適化であまり変わらないかもしれないが) *************************************************************************/ #if (1 == 定数 || 2 == 定数) for( i=0 ; i < CONST1 ; i++ ){ /* 処理 ; */ } #elif (3 == 定数) for( i=0 ; i < CONST2 ; i++ ){ /* 処理 ; */ } #endif }
解説 下記の場合、冗長な警告が出る事があります。 (1)巨大関数形式マクロ使用時。