替换#define

Gok*_*kul 2 c++ switch-statement c-preprocessor

我想替换一个

#define INTERVAL_MASK(b) (1 << (b))
Run Code Online (Sandbox Code Playgroud)

具有内联函数.

int INTERVAL_MASK(int b)
{
    return (1 << b);
}
Run Code Online (Sandbox Code Playgroud)

但我有一个switch case,它在case语句中使用预处理器指令.怎么去转换呢?更换switch搭配if是唯一的选择吗?

Jam*_*lis 6

switch case标签必须有一个整数常量表达式,因此你不能在case标签中进行函数调用.

使用宏没有任何问题.

如果你真的担心使用宏,#define它就在switch语句之前,#undef它紧跟在switch语句之后.

在C++ 0x中,您将能够创建constexpr可用于常量表达式的函数,但据我所知,编译器实际上还没有完全支持C++ 0x的那部分.