Сохранение определений препроцессора [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сохранение определений препроцессора [дубликат]

Сообщение Anonymous »


возможный дубликат: < /strong>

Могу ли я переопределить макрос C ++, а затем определить его обратно? < /p>
< /blockquote>

Скажите, что у меня есть какой -то код, в котором используется имя Blah < /code> для переменной. Предположим, что Blah является обычным определением препроцессора во многих стандартных файлах заголовков (определено как 10), поэтому, если мой файл включен после какого -либо из них, код разрывается, потому что Blah преобразуется на 10; Поэтому я должен #undef blah . Но также другие заголовки могут зависеть от Blah , поэтому я должен восстановить Blah до исходного значения после того, как мой заголовок будет выполнен. Можно ли сделать что -то вроде этого: < /p>

#ifdef BLAH
#define BLAH_OLD BLAH
#undef BLAH
#endif

... code ...

// restore BLAH to 10
#ifdef BLAH_OLD
#define BLAH BLAH_OLD
#end
< /code>

? Это, конечно, не работает, потому что Blah не расширен до 10. Я пытался сделать что -то вроде < /p>

#define EXPAND_AGAIN(x) x
#define EXPAND(x) EXPAND_AGAIN(x)
#define BLAH_OLD EXPAND(BLAH)
< /code>

Но это тоже не работает, поскольку расширение принимается буквально и не расширяется. Я использую MSVC 2008/2010, но было бы прекрасно, если бы решение будет работать и на большинстве других компиляторов.

Подробнее здесь: https://stackoverflow.com/questions/412 ... efinitions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»