Voglio rilevare, nel file di origine, se il compilatore utilizzato supporta static_assert.Come rilevare se un compilatore supporta static_assert?
risposta
In c11, static_assert
è una macro che si espande a _Static_assert
.
si può semplicemente utilizzare:
#include <assert.h>
#if defined(static_assert)
// static_assert macro is defined
#endif
Nota che alcuni compilatori (ad esempio, IAR) hanno anche un'estensione static_assert
parola chiave, anche se non supportano C11.
Come accennato nei commenti si può anche verificare la presenza di C11:
#if (__STDC_VERSION >= 201112L)
// it is c11, static_assert is defined when assert.h is included
#endif
E allora come fa a sapere se assert.h _Static_assert è supportato? – yshui
@yshui, i file di intestazione standard come 'assert.h' sono forniti dalla piattaforma, quindi hanno la loro magia interna per sapere cosa è supportato o meno. Questo è esattamente il siero di latte che sono qui, quindi non devi preoccuparti di queste caratteristiche. –
si potrebbe verificare la presenza di '__STDC_VERSION__> = 201100' o somesuch – Christoph