Macro e commenti su più righe

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.