Как показать значение #define во время компиляции в gcc
До сих пор я дошел до:
#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)
Что работает, но что, если ADEFINE не является строкой?
#define ADEFINE 23
#pragma message ("ADEFINE" ADEFINE)
причины:
предупреждение: неправильное сообщение #pragma, игнорируется
В идеале я хотел бы иметь возможность иметь дело с любым значением, включая undefined.
Ответы
Ответ 1
Чтобы отображать макросы, которые не являются строками, строчить макрос:
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s
#define ADEFINE 23
#pragma message ("ADEFINE=" STRINGIFY(ADEFINE))
Если у вас есть/хотите boost, вы можете использовать boost stringize, чтобы сделать это для вас:
#include <boost/preprocessor/stringize.hpp>
#define ADEFINE 23
#pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))
Ответ 2
Я не уверен, что это будет делать то, что вы хотите, но если вас это интересует, чтобы отлаживать случайную проблему с макросом (так что вам не нужно отображать сообщение в каждом компиляторе), следующее работа для вас. Используйте параметр gcc -E -dD
, чтобы сбрасывать директивы #define
вместе с выходом предварительной обработки. Затем проведите через grep
, чтобы увидеть только нужные строки:
// test.c
#include <stdlib.h>
#include <stdio.h>
#define ADEFINE "23"
#include <string.h>
int main(int argc, char *argv[])
{
#undef ADEFINE
#define ADEFINE 42
return 0;
}
Команда gcc -E -dD -c test.c | grep ADEFINE
показывает:
#define ADEFINE "23"
#undef ADEFINE
#define ADEFINE 42