我有3个define
声明:
#define LOCATION_SEA 1
#define LOCATION_AIR 2
#define LOCATION_GROUND 3
我有两种方法可以针对那些define
s检查特定变量:
int IsLocationGround(TreeNode *node)
{
return (node->node_type == LOCATION_GROUND);
}
int IsAnyLocation(TreeNode *node)
{
return (node->node_type == LOCATION_GROUND ||
node->node_type == LOCATION_AIR ||
node->node_type == LOCATION_SEA );
}
在我的部分代码中我这样做:
if (IsLocationGround(node))
statements A.....
else if (IsAnyLocation(node))
statements B.....
else
statements C
由于函数IsLocationGround()和IsAnyLocation()彼此非常接近,是否可以通过这种方式更改它,我将只使用1个if-else块?
答案 0 :(得分:2)
如果类别不是独占,标准的C / UNIX方式是使用位掩码。我创建了函数static
,它可以引导编译器使它们内联。
#define LOCATION_SEA 1
#define LOCATION_AIR 2
#define LOCATION_GROUND 4
#define LOCATION_ALL ( LOCATION_SEA | LOCATION_AIR | LOCATION_GROUND )
static int IsLocationGround(TreeNode *node)
{
return (node->node_type & LOCATION_GROUND);
}
static int IsAnyLocation(TreeNode *node)
{
return (node->node_type & LOCATION_ALL);
}
答案 1 :(得分:0)
您可以使用此等效代码替换所有if
/ else if
/ else
代码和函数IsLocationGround
/ IsAnyLocation
代码:
switch (node->node_type) {
case LOCATION_GROUND:
statements A.....
break;
case LOCATION_AIR:
case LOCATION_SEA:
statements B.....
break;
default:
statements C.....
}