gpt4 book ai didi

c - 在 C 中获取 switch-case 中的 case 数量

转载 作者:行者123 更新时间:2023-12-02 18:20:26 24 4
gpt4 key购买 nike

是否可以获取 C 中 switch case 中的 case 数量,而无需手动添加在每种情况下递增的计数器变量?

最佳答案

正如我之前评论的,我认为您需要一个调度表而不是 switch 语句。这是一个小例子。

假设你得到了这个:

int find_the_case();
void do_something();
void do_something_different();
void do_something_completly_different();
void do_default();

int main(int argc, char *argv[])
{
int c = find_the_case();
switch(c){
case 0:
do_something();
break;
case 1:
do_something_different();
break;
case 5:
do_something_completly_different();
break;
default:
do_default();
break;
}
return 0;
}

现在可以将其重写为:

#define MAX_NUMBER_OF_CASES 6
int main_dispatchtable()
{
void (*table[MAX_NUMBER_OF_CASES])(void) = {
[0] = do_something,
[1] = do_something_different,
[5] = do_something_completly_different
};

int c = find_the_case();
if( table[c] )
table[c]();
else
do_default();

/* for the counting */
int count = 0;
for (int i = 0; i < MAX_NUMBER_OF_CASES; i++ )
if( table[i] ) count++;

return 0;
}

这通常是比使用 switch 语句更好的方法。它不仅使添加更多案例变得更加简单,而且还允许对案例进行计数。如果您有一个巨大的表和稀疏的情况,您可以使用哈希表而不是普通数组。

编辑:当然,调度表比 switch case 有更多优点,因为您可以动态添加、删除和更改调度表。这可能是最大的优势。

关于c - 在 C 中获取 switch-case 中的 case 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35312014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com