Как избежать дублирования глобальных объектов?
От: Невидимка  
Дата: 15.11.14 14:21
Оценка: -2 :)
Доброго дня.

Есть наборы глобальных объектов, создаваемых автоматически:

#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) для каждого параметра (с отказом от автогенерации), кроение списков с выделением общей части — сами понимаете, слишком муторно, не подходит.
С уважением, Дмитрий
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.