È una buona pratica ridefinire le parole chiave non disponibili con i macro?
Uso GCC 4.8 in uno dei miei progetti che non è esattamente compatibile con lo standard C11. Almeno non nella misura di 4.9. Ma ci sono alcuni casi in cui mi piacerebbe usare il moderno static_assert
per affermare staticamente qualche espressione in fase di compilazione che non è ancora supportata in GCC 4.8.
#if (__STDC_VERSION__ < 201112L) && !defined(__cplusplus) && !defined(static_assert)
#define static_assert(e, msg) ((void)char[(e)? 1: -1])
#endif
Ho seguito lo standard C11 dove dice che non dovremmo usare parole chiave per qualsiasi altro scopo. È anche afferma che static_assert
è una macro definita in assert.h
. È stato un po 'di confusione interpretare. Per evitare qualsiasi problema di porting in futuro, l'ho fatto racchiudere all'interno di un controllo #if
per assicurarmi che non fosse C11 prima di definire quella macro.
Quindi è una buona pratica ridefinire le parole chiave non disponibili come macro che offrono un comportamento simile?
Nota, per favore non suggerire di aggiornare il mio compilatore. Non è facile in un ambiente embedded.