2010-04-13 7 views
0

si par exemple j'ai:fonction macro pour l'impression

#define PRINT(x) fprintf(stderr, x); 

et dans le code i l'ajouter:

PRINT(("print this")) 

sortie est: [imprimer cette]

si je l'ajouter :

PRINT(("print %s", "this")) 

sortie est: [this]

quelqu'un pourrait-il m'expliquer pourquoi il reçoit juste le "this" argument et pas toute la chaîne?

Répondre

6
PRINT(("print %s", "this")) 

devient:

fprintf(stderr, ("print %s", "this")); 

qui équivaut à:

fprintf(stderr, "this"); 

However, variadic macros (de C99) travail:

#define PRINT(...) fprintf(stderr, __VA_ARGS__) 

int main() { 
    PRINT("print %s", "this"); 
    return 0; 
} 
+0

essayé, je reçois le même résultat . – seven

+0

@seven: êtes-vous sûr d'avoir enlevé l'ensemble des parenthèses? –

+0

sry, je viens de voir que vous n'aviez pas utilisé de doubles crochets, ça marche, merci. – seven