2013-02-09 7 views
0

Hey un coup d'oeil sur le code:erreur MACRO lorsque vous utilisez l'instruction switch

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

appelant la macro ci-dessus dans le principal:

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

Mais quand je l'appelle cela, je reçois un message d'erreur:

expected expression before switch 

Mais quelle expression manque-t-elle?

+1

Je pense que vous confondez les expressions et les expressions et les expressions composées GNU ... –

+1

Vous voulez une fonction, pas une macro. – Gabe

+0

Que se passera-t-il Si j'utilise des macros. Je pense que les frais généraux de functio tuent un peu de temps à chaque appel, alors pourquoi pas des macros? Il suffit de demander BTW – user1971996

Répondre

4

Ce que vous essayez de faire ne fonctionnera pas. switch est une instruction mais printf nécessite une expression.

Option 1:

Retirez les supports () de votre #define et dire simplement SUFFIX(1) sans 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); 
} 

Option 2:

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

Option 3 et 4:

Faire une de ce qui précède une fonction. Le premier renvoie void, le second renvoie char *.

+0

Vous devez être C dieu, Merci beaucoup, Quelle bêtise de moi de faire cette erreur! – user1971996

+0

BTW devrais-je utiliser cette macro ou une fonction? – user1971996

+0

Ouais merci beaucoup, la première option a fonctionné. Dois-je utiliser macro ou fonction ??? – user1971996

Questions connexes