首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C中创建!default大小写

如何在C中创建!default大小写
EN

Stack Overflow用户
提问于 2012-01-21 01:35:33
回答 4查看 1.8K关注 0票数 4

在微控制器程序中,我有几条指令,除了缺省情况外,我想要为开关中的每种情况执行这些指令。然而,我并不想在每种情况下都编写函数调用或使用宏。

因为这是一个运行在3-7 7Mhz的微控制器,速度和代码空间是很重要的。例如:

代码语言:javascript
复制
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;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-21 01:37:54

代码语言:javascript
复制
int was_default_picked;

was_default_picked = 0;
switch (letter)
{
// ...

default:
    was_default_picked = 1;
}

if (!was_default_picked)
{
    // Your logic goes here
}
票数 5
EN

Stack Overflow用户

发布于 2012-01-21 01:53:28

我要为此下地狱..。

代码语言:javascript
复制
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 */
}
票数 5
EN

Stack Overflow用户

发布于 2012-01-21 02:33:38

为什么不使用按字母索引的函数指针数组,而不是switch?这将是更多的空间和速度的效率。而且,IMO,可读性更好。

代码语言:javascript
复制
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.");
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8945490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档