【发布时间】:2014-01-24 00:00:19
【问题描述】:
在我意识到语句需要保持不变之前,我想在 switch 语句中使用宏函数。示例(不编译):
#define BAND_FIELD1(B) (10 * B + 1)
...
#define BAND_FIELD7(B) (10 * B + 7)
int B = myField % 10;
switch (myField) {
case BAND_FIELD1(B):
variable1[B] = 123;
break;
case BAND_FIELD7(B):
variable7[B] = 321;
break;
...
}
我宁愿使用 if .. else:
if (myField == BAND_FIELD1(B)
variable1[B] = 123;
else if (myField == BAND_FIELD7(B)
variable7[B] = 321;
为什么 C++ switch 语句仅限于常量表达式?
【问题讨论】:
-
既然您已经确定了一种可行的程序编码方式,为什么还要另一种方式?
-
推测:因为它们实际上只是跳表。
-
@FrançoisMoisan:是的,我很傻。但是等等:条件不等于
if (myField % 10 == 1)等吗?所以你可以打开myField % 10? -
您也不应该那样编写宏,因为它会将标记
B替换为您传递的任何内容,并且如果B包含它自己的任何操作(例如x << 2)。#define BAND_FIELD1(B) (10 * (B) + 1)会解决这个问题。 -
这只是一个例子......原来的开关有一堆语句(并使用由宏定义的静态常量),我需要改变一些情况来处理数组。所以我把它们从开关上取下来,用 if .. else 动态处理它们。
标签: c++ switch-statement