在C中切换语句

我有以下if语句:
if (strcmp(registerName,"zero"))
            return 00000;
    else if (strcmp(registerName,"at"))
        return 00001;
    else if (strcmp(registerName,"v0"))
        return 00010;
    else if (strcmp(registerName,"v1"))
        return 00011;

它实际上很长 – 大约20个if语句.因此,我想使用一个开关.当每个语句具有不同的条件时,如何将其转换为切换?

我尝试了下面的代码,但它不起作用:

int registerAddress;

switch(registerAddress) {

case 1 (strcmp(registerName,"zero")):
        regsiterAddress = 00000;
        break;
case 2 (strcmp(registerName,"at")):
        registerAddress = 00001;
        break;
}

解决方法

你不能 – 在C中切换语句只适用于基本类型,而不是字符串.您可以使用哈希表或搜索树来优化匹配,但只有20个选项可能不值得.

您可以做的是清理代码,设置映射表:

struct str2Num {
    char *str;
    int num;
};

const struct str2Num registerMap[] = {
    { "zero",00000 },{ "at",00001 },{ "v0",00010 },{ "v1",00011 },{ NULL,0 }  /* end marker */
};

并按照以下方式进行匹配:

int i;
for (i = 0; registerMap[i].str != NULL; i++) {
    if (strcmp(registerName,registerMap[i].str) == 0) {
        return registerMap[i].num;
    }
}
/* handle no-match case here */

实际上,如果按字母顺序对表进行排序,甚至可以使用bsearch()进行快速匹配.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...