Доброго дня.
Есть наборы глобальных объектов, создаваемых автоматически:
#define OBJ(name) sometype name
#define DECL(name) OBJ(name);
#define EDECL(name) extern DECL(name)
// fmt1.h
#define X(name) EDECL(name)
#define FMT1 \
X(time) \
X(speed)
FMT1
// fmt2.h
#define FMT2 \
X(time) \
X(pressure)
FMT2
// fmt1.c (fmt2.c аналогичен)
#include "fmt1.h"
#undef X
#define X(name) DECL(name)
FMT1
Теперь, при использовании двух форматов одновременно, будет ошибка — два одинаковых объекта. Моя задача: сделать так, чтобы кросс-объект был один (а не несколько разных с уникальными именами).
Вот такое, естественно, не канает (nested # и всё такое):
#define X(name) \
#ifndef DEF_##name \
DECL(name) \
#define DEF_##name \
#endif
...но очень хочется. Как быть?
зы. Ручные флажки (DEF_name) для каждого параметра (с отказом от автогенерации), кроение списков с выделением общей части — сами понимаете, слишком муторно, не подходит.