Il seguente codice C++ compila e funziona come il programmatore previsto il GCC (4.0.4)macro del preprocessore come parametri per altre macro
#define FOO(x,y,z) ((x)*(y)*(z))
#define BAR(x) FOO(x,1)
#define BAZ 3,7
int main()
{
return BAR(BAZ); /* interpreted as return ((3)*(7)*(1)); */
}
Tuttavia, le macro causano un errore di Microsoft Visual C++ Express 2010:
main.cpp (7): C4003 avviso: parametri effettivi insufficienti per la macro 'FOO'
main.cpp (7): l'errore C2059: errore di sintassi: ')'
Il problema sembra essere che il compilatore Microsoft, mentre gestisce la macro BAR internamente, non espande la macro BAZ ai parametri che potrebbero essere utilizzati come due parametri separati per la macro FOO.
Secondo lo standard, quale compilatore gestisce correttamente la situazione?
Sembra che quello che stai davvero cercando sia [macro variadic] (http://en.wikipedia.org/wiki/Variadic_macro). – leftaroundabout
@leftaroundabout non sembra che sia ... –
@iammilind: Cosa manca dal capitolo 16 dello standard? Come non è uno standard 'reale'? –