Мне нужно сделать утверждение на основе двух связанных макропроцессоров #define
, объявленных в разных заголовочных файлах ... База кода огромна, и было бы неплохо, если бы я мог найти место для размещения утверждения, где два заголовки уже включены, чтобы избежать ненужного загрязнения пространств имен.
Проверка только того, что файл включает оба явно, может оказаться недостаточной, поскольку один (или оба) из них могут быть включены в верхний уровень иерархии вложенного включения.
Я знаю, что было бы не сложно написать скрипт, чтобы проверить это, но если уже есть инструмент, который делает эту работу, тем лучше.
Пример:
файл foo.h
#define FOO 0xf
файл bar.h
#define BAR 0x1e
Мне нужно положить куда-нибудь (где это не имеет большого значения) что-то вроде этого:
#if (2*FOO) != BAR
#error "foo is not twice bar"
#endif
Да, я знаю, что пример глупый, так как их можно заменить, так что одно получается из другого, но допустим, что включения могут быть сгенерированы из разных мест, не находящихся под моим контролем, и мне просто нужно проверить, совпадают ли они во время компиляции ... И я не хочу просто добавлять одно включение за другим, так как оно может конфликтовать с предыдущим кодом, который я не написал, поэтому я хотел бы найти файл, в котором оба уже присутствуют .
Вкратце: как найти файл, который включает (прямо или косвенно) два других файла?