Domanda

In generale, ogni tanto ho una catena di macro nidificate con alcuni elementi condizionali del preprocessore nelle loro definizioni. Può essere doloroso eseguire il debug poiché è difficile vedere direttamente il codice in esecuzione.

Qualche tempo fa ricordo vagamente di aver trovato un flag di compilatore (gcc) per espanderli, ma ho avuto problemi a farlo funzionare in pratica.

È stato utile?

Soluzione

gcc -E genererà la sorgente preelaborata su stdout.

Altri suggerimenti

Per gli utenti di MSVC, è possibile fare clic con il pulsante destro del mouse sul file / progetto, visualizzare le impostazioni e modificare le proprietà del file in output sorgente preelaborata (che in genere nella directory obj).

Questo potrebbe non essere applicabile nella tua situazione, ma le macro ostacolano davvero il debug e spesso sono abusate ed evitabili.

Puoi sostituirli con funzioni incorporate o altrimenti eliminarli tutti insieme?

Probabilmente dovresti iniziare ad allontanarti dalle macro e iniziare a usare inline e template.

Le macro sono un vecchio strumento, lo strumento giusto a volte. Come ultima risorsa, ricorda che printf è tuo amico (e in realtà printf non è poi un cattivo amico quando fai cose multithread)

Esegui il debug dello smontaggio con i simboli caricati.

gcc -save-temps scriverà un file .i (o .ii per C ++) che è l'output del preprocessore C, prima che venga consegnato al compilatore. Questo può essere spesso illuminante.

GCC e compilatori compatibili usano l'opzione -E per generare la sorgente preelaborata su standard out.

gcc -E foo.cpp

Sun Studio supporta anche questo flag:

CC -E foo.cpp

Ma ancora meglio è -xdumpmacros. Puoi trovare ulteriori informazioni nei documenti di Suns.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top