字符串数组上的C/C++开关案例
发布时间:2020-12-16 05:58:35 所属栏目:百科 来源:网络整理
导读:我有几个数据结构,每个数据结构有4个字节的字段. 由于我的平台上4个字节等于1 int,我想在case标签中使用它们: switch (* ((int*) structure-id)) { case (* ((int*) "sqrt")): printf("its a sqrt!"); break; case (* ((int*) "log2")): printf("its a log2
我有几个数据结构,每个数据结构有4个字节的字段.
由于我的平台上4个字节等于1 int,我想在case标签中使用它们: switch (* ((int*) &structure->id)) { case (* ((int*) "sqrt")): printf("its a sqrt!"); break; case (* ((int*) "log2")): printf("its a log2!"); break; case (((int) 'A')<<8 + (int) 'B'): printf("works somehow,but unreadable"); break; default: printf("unknown id"); } 这会导致编译错误,告诉我case表达式不会减少为int. 我如何使用有限大小的char数组,并将它们转换为数字类型以用于switch / case? 解决方法
免责声明:除了娱乐或学习目的外,请勿使用此功能.对于严肃的代码,使用常用的习惯用法,在一般情况下从不依赖编译器特定的行为;如果完成,不兼容的平台应该触发编译时错误或使用良好的通用代码.
似乎标准允许根据语法使用多字符字符常量.尚未检查以下是否真的合法. ~/$cat main.cc #include <iostream> #ifdef I_AM_CERTAIN_THAT_MY_PLATFORM_SUPPORTS_THIS_CRAP int main () { const char *foo = "fooo"; switch ((foo[0]<<24) | (foo[1]<<16) | (foo[2]<<8) | (foo[3]<<0)) { case 'fooo': std::cout << "fooo!n"; break; default: std::cout << "bwaah!n"; break; }; } #else #error oh oh oh #endif ~/$g++ -Wall -Wextra main.cc && ./a.out main.cc:5:10: warning: multi-character character constant fooo! 编辑:哦看,直接在语法摘录下面有2.13.2字符文字,子弹1:
但在第二个子弹中:
所以要小心. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |