在微控制器程序中,我有几条指令,除了缺省情况外,我想要为开关中的每种情况执行这些指令。然而,我并不想在每种情况下都编写函数调用或使用宏。
因为这是一个运行在3-7 7Mhz的微控制器,速度和代码空间是很重要的。例如:
switch(letter)
{
case a:
ShowApple();
printf("You entered an english letter.");
break;
case b:
ShowBananna();
printf("You entered an english letter.");
break;
...
case z:
ShowZebra();
printf("You entered an english letter.");
break;
default:
printf("You did not enter an english letter. Silly human!");
break;
}发布于 2012-01-21 01:37:54
int was_default_picked;
was_default_picked = 0;
switch (letter)
{
// ...
default:
was_default_picked = 1;
}
if (!was_default_picked)
{
// Your logic goes here
}发布于 2012-01-21 01:53:28
我要为此下地狱..。
switch (foo) {
default:
/* code for default case */
break;
if (0) { case 'a':
/* ... */
} if (0) { case 'b':
/* ... */
} if (0) { case 'c':
/* ... */
}
/* common code for non-default cases */
}发布于 2012-01-21 02:33:38
为什么不使用按字母索引的函数指针数组,而不是switch?这将是更多的空间和速度的效率。而且,IMO,可读性更好。
static void (*fn_table['z' - 'a' + 1])(void) = {
&ShowApple,
&ShowBananna,
...,
&ShowZebra,
};
if (letter < 'a' || 'z' < letter)
{
printf("You did not enter an english letter. Silly human!");
}
else
{
(*fn_table[letter - 'a'])();
printf("You entered an english letter.");
}https://stackoverflow.com/questions/8945490
复制相似问题