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)巨大関数形式マクロ使用時。