лязг 3.9 добавил к -Wall
в предупреждении -Wexpansion-to-defined
, который производитКак справиться с предупреждением о появлении ключа (3.9)?
макрорасширение продуцирующего «определяется» имеет неопределенное поведение
в случае defined
используется за пределами #if
выражения, включая случай макрос, который затем используется в выражении #if
. Например, следующий код
// in some file:
#define HAS_GNU (defined(__GNUC__) && !defined(__clang__))
// possibly in another file:
#if defined(__clang__) || HAS_GNU
/* ... */
#endif
производит
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__))
Так что это «правильный» способ сделать это?