我尝试创建一个切换大小写,其中大小写是宏的结果,但在编译代码时,我收到错误“以前在此使用”和“重复值”
我不明白从什么时候开始我确信宏的结果总是不同的。
下面是我试用的代码
#define MACROTEST(a, b) (a<<2 + b)
switch (MACROTEST(input_string[0], input_string[1])) {
case (MACROTEST('a', 'c')):
{
/*some code*/
} break;
case(MACROTEST('g', 'e')):
{
/*some code*/
} break;
case(MACROTEST('s', 'e')):
{
/*some code*/
} break;
case(MACROTEST('g', 'm')):
{
/*some code*/
} break;
case(MACROTEST('s', 'b')):
{
/*some code*/
} break;
case(MACROTEST('g', 'r')):
{
/*some code*/
} break;
case(MACROTEST('s', 'r')):
{
/*some code*/
} break;
default: {
/*some code*/
}
有人知道问题出在哪里吗?
1条答案
按热度按时间myzjeezk1#
这个宏写得很马虎。
1.您很可能希望它像这样工作?
((a<<2) + b)
它不是这样的,因为二进制加法的优先级高于移位。1.正如任何一本C编程书籍中所讲的那样,必须始终用括号将类似函数的宏参数括起来,以避免类似的优先级问题。
所以我认为你要找的宏观是: