Определите макрос для запуска в глобальной области без предупреждений
Следующий код в порядке, но я получаю предупреждение из-за дополнительного ';' после INIT.
#define INIT \
namespace Vars { \
int a = 0; \
}
INIT;
int main() { ... }
Как я могу исправить этот код, разрешив нотацию с дополнительным ';'?
Учтите, что INIT должен вызываться в глобальном масштабе.
2 ответа
Решение
Это решение кажется разумным:
#define INIT \
namespace Vars { \
int a = 0; \
} int INIT_ = 0
INIT;
int main() { ... }
Если вы действительно хотите использовать точку с запятой, одним из возможных способов решения этой проблемы является определение неиспользованного struct
с "уникальным" именем, например:
#define CAT_IMPL(m0, m1) m0##m1
#define CAT(m0, m1) CAT_IMPL(m0, m1)
#define INIT \
namespace Vars { \
\
} \
struct CAT(some_unique_name, __LINE__) \
{ } __attribute__((unused))
INIT;
INIT;
int main() { }