clang 3,9 a ajouté à -Wall
un avertissement -Wexpansion-to-defined
, qui produitComment gérer l'avertissement de clang (3.9) -Exposition-à-définir?
extension macro produisant « défini » a un comportement non défini
en cas defined
est utilisée en dehors d'une expression #if
, y compris le cas de une macro qui est ensuite utilisée dans une expression #if
. Par exemple, le code suivant
// in some file:
#define HAS_GNU (defined(__GNUC__) && !defined(__clang__))
// possibly in another file:
#if defined(__clang__) || HAS_GNU
/* ... */
#endif
produit
test.cc:5:27: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
#if defined(__clang__) || HAS_GNU
^
test.cc:3:18: note: expanded from macro 'HAS_GNU'
#define HAS_GNU (defined(__GNUC__) && !defined(__clang__))
^
test.cc:5:27: warning: macro expansion producing 'defined' has undefined behavior [-Wexpansion-to-defined]
test.cc:3:40: note: expanded from macro 'HAS_GNU'
#define HAS_GNU (defined(__GNUC__) && !defined(__clang__))
Alors, quelle est la façon de le faire 'correct' qui?