Ho bisogno di avere commenti su più righe all’interno di un gruppo di macro in modo che una delle macro inizi un blocco di commenti e un altro la concluda, in questo modo:
#define C_BEGIN /* #define C_END */ ... other macros
Ma abbastanza sicuro, questo approccio non funziona.
Non puoi farlo per il seguente ragionamento. Supponiamo che sia ansible.
Quindi hai creato una macro che si sostituisce con /*
e un’altra per */
. Cosa succede allora? Innanzitutto, i commenti vengono rimossi dal codice. Successivamente, il preprocessore sostituisce le macro con i commenti. Dopodiché, il compilatore si strozzerà: non sa cosa fare con /*
e */
perché semplicemente non affronta mai cose del genere: i commenti vengono sempre eliminati prima della compilazione, quindi non sa nemmeno cosa sia un “commento” “è. Probabilmente penserà che sia una divisione seguita da una moltiplicazione.
Quindi la nostra ipotesi è sbagliata e tu non puoi farlo.
L’elaborazione dei commenti avviene prima dell’espansione macro:
c ++ 11
2.2 Fasi di traduzione [lex.phases]
1 – La precedenza tra le regole di syntax della traduzione è speci fi cata dalle seguenti fasi. […]
3. […] Ogni commento è sostituito da un carattere di spazio. […]
4. Le direttive di preelaborazione vengono eseguite, le invocazioni di macro vengono […]
Forse potresti provare a preelaborare il tuo file sorgente due volte? (Nota: non farlo.)
Ma abbastanza sicuro, questo approccio non funziona.
Non può funzionare. Il commento nel tuo #define C_BEGIN
non fa parte e non può far parte della definizione della tua macro. Per quanto riguarda la lingua, il tuo #define C_END
non è una definizione di macro. Fa solo parte di quel commento multilinea. In altre parole, è uno spazio bianco. I commenti vengono elaborati (trasformati in spazi vuoti) prima che il preprocessore / compilatore arrivi allo stadio di interpretazione delle definizioni delle macro.
Se si utilizza un IDE, è sufficiente premere ctrl / per Windows o comando / su Mac. Dovresti selezionare le linee che vuoi commentare per prime.