使用switch语句时出现MACRO错误

时间:2013-02-09 23:01:01

标签: c macros switch-statement

嘿看看代码:

#define SUFFIX(n)  (switch(n)                                               \
                   {                                                        \
                        case 1: printf("st\n");                             \
                        break;                                              \
                                                                            \
                        case 2: printf("nd\n");                             \
                        break;                                              \
                                                                            \
                        case 3: printf("rd\n");                             \
                        break;                                              \
                   }                                                        \
                   )                                                        

在main中调用上面的宏:

int main()
{
    printf("%s", suffix(1));
}

但是当我打电话给我时,我收到一条错误消息:

expected expression before switch

但我错过了什么表达?

1 个答案:

答案 0 :(得分:6)

你要做的事情是行不通的。 switch是一个陈述,但printf需要一个表达式。

选项1:

()中删除括号#define,然后在没有SUFFIX(1)的情况下简单地说printf

#define SUFFIX(n)  switch(n)                                               \
                   { case 1: printf("st\n"); break;                        \
                     case 2: printf("nd\n"); break;                        \
                     case 3: printf("rd\n"); break;                        \
                   }
int main()
{
    SUFFIX(1);
}

选项2:

#define SUFFIX(n) ( n == 1 ? "st" : (n == 2 ? "nd" : (n == 3 ? "rd" : "")) )
int main()
{
  printf("%s", SUFFIX(1));
}

选项3和4:

制作上述功能之一。第一个返回void,第二个返回char *