С GCC или Clang (по крайней мере) вы можете распечатать значения макросов препроцессора:
#define LONG_BIT 60
#pragma message "LONG_BIT is " STRINGIFY(LONG_BIT)
Но это не даст вам значение sizeof(long)
, которое не является препроцессоромпостроить.Это также не будет делать арифметику;LONG_BIT
должно быть действительным числом, чтобы получить желаемое сообщение.
Это не работает с #error
, который не выполняет подстановку макросов в тексте.
Здесь STRINGIFY
имеет обычное двухэтапное определение:
#define STRINGIFY_(x) #x
#define STRINGIFY(x) STRINGIFY_(x)
Вы также можете написать целое сообщение внутри аргументов, по крайней мере, в этом случае, но следите за неожиданными расширениями:
#pragma message STRINGIFY(LONG BIT is LONG_BIT)