2009-05-20 4 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))