Questo documento nella sua sezione 2.6 Include comprende ha il seguente paragrafo:
Se la linea si espande in uno stream token che inizia con un token <e include un token>, i token tra <e il primo> vengono combinati per formare il nome file da includere. Qualsiasi spazio bianco tra i token viene ridotto a un singolo spazio; quindi viene mantenuto qualsiasi spazio dopo <iniziale, ma viene ignorato uno spazio finale prima della chiusura> . CPP cerca il file in base alle regole incluse nella parentesi angolare.
So che questa definizione è definita, ma perché deve essere così per GCC? Mi riferisco specificamente alla frase evidenziata sopra.
MODIFICARE
Ho appena notato che il terzo paragrafo prima di quello sopra citato dice quanto segue:
Devi fare attenzione quando definisci la macro.
#define
salva i token, non il testo. Il preprocessore non ha modo di sapere che la macro verrà utilizzata come argomento di#include
, quindi genera token ordinari, non un nome di intestazione. È improbabile che ciò causi problemi se si utilizzano inclusioni a virgoletta doppia, abbastanza vicine alle costanti di stringa. Se si utilizzano parentesi angolari, tuttavia, si potrebbero avere problemi .
Qualcuno sa che tipo di problema viene segnalato qui?