la concaténation de chaînes de caractères dans une instruction printf

gcc 4.7.2
c89

Bonjour,

#define LOG_ERR(fmt, ...)                                               \
    fprintf(stderr, "[ERROR] %s:%d: error [%s] " fmt "\n", __func__, __LINE__, strerror(errno), ##__VA_ARGS__)

Et je l'utilise comme ceci:

LOG_ERR("Failed to connect to message queue [ %d ]", msg_id);

L'esf a été concaténés dans la fprintf déclaration. Comment est-ce possible?

J'ai essayé de faire de même avec le suivant ci-dessous, juste pour tester le concept, mais a échoué avec une erreur de compilation:

/* Using char array */
const char name[] = "Joe";

printf("Hello how " name " how are you today?\n");

Using constant string literal
const char *name = "Joe";

printf("Hello how " name " how are you today?\n");

Fois jeu m'a l'erreur suivante:

expected ')' before name

Un grand merci pour toutes les suggestions,

InformationsquelleAutor ant2009 | 2012-12-26