У меня есть символ, определенный глобально, который должен быть условно неопределенным для данного подмножества моих исходных файлов. Все файлы, требующие специальной обработки, уже упакованы в пре- и пост-включения:
pre.h:
#undefine mysymbol // [1]
post.h:
#define mysymbol MY_SYMBOL_DEFINITION // [2]
Моя проблема в том, что pre.h
и post.h
могут быть включены несколько раз для данного исходного файла из-за различных цепочек включения. Таким образом, мне нужно, чтобы 1 произошло в первый раз перед .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__)
-- см. мой другой вопрос по этой теме -- и нам нужно отменить определение этих макросов в наборе исходных файлов, обернутых пре- и пост-включениями, описанными выше, потому что мы не смогли создать макрос, совместимый с новым синтаксисом размещения, используемым в нем.