У меня есть символ, определенный глобально, который должен быть условно неопределенным для данного подмножества моих исходных файлов. Все файлы, требующие особой обработки, уже обернуты до и после включения:
pre.h:
#undefine mysymbol // [1]
post.h:
#define mysymbol MY_SYMBOL_DEFINITION // [2]
Моя проблема в том, что pre.h
и post.h
могут быть включены несколько раз для данного исходного файла из-за различных цепочек включения. Таким образом, мне нужно, чтобы 1 произошло в первый раз, когда включен pre.h, и мне нужно, чтобы 2 произошло в последний раз , в который включено post.h
. Концептуально:
pre // undefine
pre // no-op
pre // no-op
post // no-op
post // no-op
post // redefine
Поскольку я использую GCC 3.4.6, у меня нет доступа к макросам push и pop макросов , которые в противном случае могли бы решить эту проблему для меня.
Как мне эмулировать это поведение с оставшейся функциональностью препроцессора?
Я пытался сделать что-то вроде увеличения / уменьшения значения с препроцессором, но я не уверен, что это возможно.
«Что я действительно пытаюсь сделать?»
У нас есть макросы для замены new
на new(__FILE__, __LINE__)
- см. мой другой вопрос по этой теме - и нам нужно отменить определение этих макросов в наборе исходных файлов, обернутых предварительно и post-include, описанные выше, потому что мы не смогли создать макрос, совместимый с используемым в нем новым синтаксисом размещения.