Ho cercato attraverso code golf ed è venuta un'idea per provare questo codice:È possibile definire un'altra direttiva preprocessore?
#define D #define
dopo l'aggiunta di questa linea, tutto ha funzionato bene, ma ho ampliato in questo:
#define D #define
D VALUE
E qui ho ottenuto 5 errore di compilazione. Se cambio D
in #define
, tutto va bene, qualcuno può spiegare, perché questo codice è illegale?
NOTA: Ho usato il compilatore VS2008.
EDIT: Dopo alcune risposte che vedo che avevo bisogno di dare compilation lista degli errori:
- errore C2121: '#': carattere non valido: forse il risultato di una macro espansione
- errore C2146 : errore di sintassi: mancante ';' prima dell'identificatore "VALUE"
- errore C4430: identificatore di tipo mancante - int assunto. Nota: C++ non supporta default-int
- errore C2144: errore di sintassi: 'void' deve essere preceduto da ';'
- errore C4430: identificatore di tipo mancante - int assunto. Nota: C++ non supporta
primo errore default-int dimostra che non è solo D
define
ma include anche #
.
Poiché potrebbe dipendere dall'implementazione, si prega di indicare quale compilatore si sta utilizzando. –
"perché questo codice è illegale?" - Perché non è possibile ridefinire le direttive del preprocessore. –
@ H2CO3 Sono stato in grado di ridefinirlo, perché la prima volta ha funzionato, tuttavia dopo l'uso di quella definizione ho ottenuto errore di compilazione. – ST3