Ho diversi file di configurazione ciascuno contenente la definizione di qualche macro booleana, da impostare su 0 o 1. Quindi, nel mio codice, controllo il valore di tale macro decidere quale parte del codice attivare. Ora arriva la parte difficile: voglio essere sicuro che l'intestazione contenente la definizione della mia macro sia stata inclusa.Generazione di un errore se la macro booleana selezionata non è definita
Nell'esempio seguente, se dimentico di includere il file di intestazione contenente la definizione FOO, il compilatore stamperà "world!", Mentre mi piacerebbe invece che generasse un errore.
//in the configuration header file
#define FOO 1
//in a cpp file
#if FOO //I would like this to generate an error if I forgot to include the header file
#pragma message "Hello"
#else
#pragma message "world!"
#endif
È possibile ottenere tale comportamento? Come?
Per chiarire, io non chiedo how to generate an error if a macro is not defined, ma se è possibile trasformare la linea #if FOO
in modo tale che, al tempo stesso, esso controlla il valore booleano e genera un errore se FOO
non è definito.
Il punto di avere questo sarebbe che gli sviluppatori avrebbero saputo che il loro codice dovrebbe contenere
SPECIAL_MACRO(FOO)
che, allo stesso tempo, controllare il valore booleano di PIPPO, come se fosse un #if FOO
dichiarazione, e impedisce da dimenticare l'inclusione dell'intestazione che definisce FOO
.
Dal C++ 11 è possibile utilizzare 'static_assert' –
Perché non utilizzare' # ifdef'? – Petr
Possibile duplicato di [Come generare un errore e un avviso nel preprocessore C?] (Http: // stackoverflow.it/questions/2221517/how-to-generate-an-error-and-warning-in-c-preprocessore) –