使用switch语句时出现宏错误

使用switch语句时出现宏错误,c,macros,switch-statement,C,Macros,Switch Statement,嘿,看看代码: #define SUFFIX(n) (switch(n) \ { \ case 1: printf("st\n"); \

嘿,看看代码:

#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

但是我缺少了什么表情呢?

你想做的事行不通
switch
是一条语句,但
printf
需要一个表达式

选项1:

#define SUFFIX(n) ( n == 1 ? "st" : (n == 2 ? "nd" : (n == 3 ? "rd" : "")) )
int main()
{
  printf("%s", SUFFIX(1));
}
#define
中删除括号
()
,只需说出
后缀(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:

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

使上述其中一项成为函数。第一个返回
void
,第二个返回
char*

您试图执行的操作无效
switch
是一条语句,但
printf
需要一个表达式

选项1:

#define SUFFIX(n) ( n == 1 ? "st" : (n == 2 ? "nd" : (n == 3 ? "rd" : "")) )
int main()
{
  printf("%s", SUFFIX(1));
}
#define
中删除括号
()
,只需说出
后缀(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:

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

使上述其中一项成为函数。第一个返回
void
,第二个返回
char*

我觉得您混淆了表达式、语句和GNU复合表达式……您想要的是函数,而不是宏。如果我使用宏会发生什么。我认为Functiono每次调用都会消耗一些时间,所以为什么不使用宏呢?只要问一下BTWI,你就会觉得你混淆了表达式、语句和GNU复合表达式……你想要的是函数,而不是宏。如果我使用宏会发生什么。我认为Functiono每次调用都会消耗一些时间,所以为什么不使用宏呢?只是问一下你一定是C上帝,非常感谢,我犯了这个错误真是太傻了!顺便说一句,我应该使用这个宏还是函数?@user1971996函数会增加一点开销,但调试时你不能进入宏,它们会增加你的代码大小,可能会使你的代码有点混乱,并且不进行类型检查(就在我脑子里)。两者都有优点和缺点(功能看起来稍微好一点)。所以这取决于你真的。非常感谢,顺便说一句,我用了宏。你一定是C上帝,非常感谢,我犯了这个错误真傻!顺便说一句,我应该使用这个宏还是函数?@user1971996函数会增加一点开销,但调试时你不能进入宏,它们会增加你的代码大小,可能会使你的代码有点混乱,并且不进行类型检查(就在我脑子里)。两者都有优点和缺点(功能看起来稍微好一点)。所以这取决于你真的。非常感谢,顺便说一句,我用了宏。