2015-01-13 3 views
0

Как распечатать сообщение, содержащее макросы во время предварительной обработки?Сообщение препроцессора, содержащее макрос

т.д .:

#define MACRO_1 1 
#pragma message ("Date:" __DATE__)   // OK 
#pragma message ("MACRO_1 = " MACRO_1)  // error: pragma message requires parenthesized string 
+0

Я думаю, результат MACRO_1 должен быть строкой («1»), чтобы это работало. Вы можете привести его в код с сообщением #pragma («MACRO_1 =» # MACRO_1). См. Https://gcc.gnu.org/onlinedocs/cpp/Stringification.html – IdeaHat

+0

@IdeaHat - я попытался использовать строку «1», чтобы использовать одиночный #, но я продолжаю получать ту же ошибку ... – Pietro

ответ

1

Что вы должны сделать, это stringize препроцессора MACRO_1 после расширяется. Вы не можете вставить # MACRO_1 в сообщение #pragma(), поскольку запреты запрещены. В этом случае то, что препроцессор видит внутри #pragma message(), это «# MACRO_1», а не «1». Однако, когда вы используете SSTRINGIZE (x) (как показано в примере ниже), вы инструктируете препроцессор расширять MACRO_1 (получить его значение, которое равно 1 в вашем случае), а затем строчить его (скрытно в строку). Наконец, вы получите строку «1» внутри сообщения #pragma() в конце.

Пробуйте этот код, он должен печатать то, что вы намереваетесь сделать.

#define MACRO_1 1 
#pragma message ("Date:" __DATE__)   
#define STRINGIZE(x) "MACRO_1 = " #x 
#define SSTRINGIZE(x) STRINGIZE(x) 
#pragma message (SSTRINGIZE(MACRO_1)) 
+1

это то, что я получаю от вашего кода: 'warning: MACRO_1 = MACRO_1 [-W # pragma-messages]' – Pietro

+1

Я просмотрел код, показанный сейчас должен работать. Надеюсь это поможет :) – Aymen