Cosa significa il messaggio ``warning: macro replacement within a string literal'' ?
Qualche compilatore/preprocessore pre-ANSI interpreta le definizioni di macro come
#define TRACE(var, fmt) printf("TRACE: var = fmt\n", var)tale che l'invocazione
TRACE(i, %d);sia espansa come
printf("TRACE: i = %d\n", i);In altre parole, i parametri dei macro sono espansi anche dentro le stringhe costanti e i caratteri costanti.
L' espansione del macro non e` definita in questo modo dal K&R o dallo Standard C. Quando si vuole trasformare gli argomenti del macro in stringhe, si puo` usare il nuovo operatore di preprocessore #, assieme alla concatenazione con stringhe costanti (un'altra nuova caratteristica ANSI):
#define TRACE(var, fmt) \ printf("TRACE: " #var " = " #fmt "\n", var)Vedere anche domanda 11.17.
Riferimenti:
H&S Sez. 3.3.8 p. 51
Leggere di seguito: prev prossima su cima
Questa pagina e` di Steve Summit // Copyright 1995 // mail feedback