我想替换
#define INTERVAL_MASK(b) (1 << (b))
带内联函数。
int INTERVAL_MASK(int b)
{
return (1 << b);
}
但我有一个switch case
,它使用case
语句中的预处理程序指令。怎么去转换呢?用switch
替换if
是唯一的选择吗?
答案 0 :(得分:6)
switch case标签必须有一个整数常量表达式,因此你不能在case标签中进行函数调用。
使用宏没有任何问题。
如果你真的担心使用宏,#define
就在switch语句之前,而#undef
就在switch语句之后。
在C ++ 0x中,你将能够创建可以在常量表达式中使用的constexpr
函数,但据我所知,没有编译器实际上完全支持C ++ 0x的那部分
答案 1 :(得分:0)
为什么不const int interval_mask = (1 << b);
?
答案 2 :(得分:0)
有关switch语句的一个重要注意事项是case值可能只是常量整数表达式。
我能想到的唯一解决方法是一堆if-else语句。或者,您可以通过编程方式从2(1 <1)到1024(1 <&lt; 10)或者您的限制生成案例。表示您的switch语句如下所示:
switch(i) {
case 2:
//random stuff
break;
...
case 1024:
//random
break;
...
}
会有一个单独的代码来生成这个。实际上并不会那么难。
答案 3 :(得分:0)
据我所知,包含switch,if和loop之类的控制语句的函数没有内联。
您可以确定是否使用宏。