Рассмотрим заголовок lib.h для чтения (только для чтения)
#define XYZ 42
В исходном файле я хочу использовать слово XYZ для несвязанной цели и не хочу, чтобы подстановка была с 42. Но в том же исходном файле для других целей я также хочу получить доступ к значению 42 из lib.h без его жесткого кодирования. Как переименовать макрос из XYZ, скажем, LIB_XYZ?
Следующее не работает, поскольку препроцессор хочет XYZ во время подстановки LIB_XYZ, но XYZ был undefined:
#include "lib.h"
#define LIB_XYZ XYZ
#undef XYZ
Есть ли способ обмануть препроцессор в расширение LIB_XYZ до его окончательного значения до того, как XYZ будет потерян?