Ho appena scavato un bug nel codice stiamo lavorando con * che stava venendo a mancare a causa della seguente situazione:Chiamata di funzione all'interno assert == male?
Assert(SomeVitalFunction(foo) == OK)
Questo ha funzionato bene per tutto il tempo le macro DEBUG stati #defined:
#ifdef DEBUG
#define Assert(x) if((x) == 0){/*some error handling*/}
#else
#define Assert(x)
#endif
Ma quando abbiamo #undef'd DEBUG
ha l'effetto di eliminare la chiamata di funzione vitale dal codice.
Non riesco a capire come potrebbe funzionare con DEBUG #undef
'd, e sembra una cattiva idea in generale mettere qualsiasi tipo di chiamata di funzione all'interno di un asser come questo.
Ho perso qualcosa?
* = Modifica per chiarire seguente commento di Carpetsmoker: Il codice viene da una cabala particolarmente arretrata di schiavi codice Elbonian, il nostro compito è stato quello di incidere, tagliare, la barba, polacco, disinfettare e applicare il rossetto alla cosa.
Il punto di "assert' è di" * aiutare i programmatori a trovare bug nei loro programmi * "... Quindi tutti gli asert dovrebbero idealmente essere rimovibili, e tutto dovrebbe funzionare ugualmente. Quindi hai ragione nella tua osservazione e tu o uno dei tuoi colleghi avete fatto un errore in passato. – Carpetsmoker
Ho scritto una macro di Visual Studio molto tempo fa per cercare la base di codice per questo (in quei giorni, cercando 'ASSERT (... (...)' - cioè 2 o più parentesi prima di quella di chiusura) perché è un problema così grande quando succede. – AAT