2009-05-20 29 views

risposta

16

Definisce l'espressione asser (nulla) per non fare nulla.

Presumibilmente, l'ambiente in uso non supporta l'istruzione ANSI C assert oppure il programmatore non era consapevole del fatto che poteva essere disabilitato definendo NDEBUG.

+6

Oppure il codice era in assert.h –

8

Per espandere su ciò che bdonlan dice, la ragione per la macro non si espande vuoto è perché se lo facesse, allora qualcosa di simile:

assert(something) // oops, missed the semi-colon 
assert(another_thing); 

sarebbe compilazione in modalità di rilascio, ma non in modalità di debug. Il motivo per cui è ((void) 0) anziché solo 0 consiste nell'impedire l'avviso di "istruzioni senza effetto" (o in qualsiasi modo MSVC le chiami).

0

solo aggiungere, questa è la definizione di assert in newlib anche, quando NDEBUG è definito come una direttiva del preprocessore. Newlib è la libreria C open source utilizzata su Cygwin e sistemi incorporati.

Dal assert manuale in newlib:

La macro viene definita per consentire di disattivare tutti gli usi di affermare al compilazione tempo definendo NDEBUG come variabile preprocessore. Se si esegue questa operazione, il assert macro restituisce (void(0))

Problemi correlati