值到目前爲止,我已經儘量了:如何顯示的#define在編譯時在GCC
#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)
其中一期工程,但如果ADEFINE是什麼不是一個字符串?
#define ADEFINE 23
#pragma message ("ADEFINE" ADEFINE)
原因:
警告:格式不正確「的#pragma消息」,忽視
理想情況下,我想能夠應付任何價值,包括不確定的。
值到目前爲止,我已經儘量了:如何顯示的#define在編譯時在GCC
#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)
其中一期工程,但如果ADEFINE是什麼不是一個字符串?
#define ADEFINE 23
#pragma message ("ADEFINE" ADEFINE)
原因:
警告:格式不正確「的#pragma消息」,忽視
理想情況下,我想能夠應付任何價值,包括不確定的。
要顯示宏這不是字符串,stringify the macro:
#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))
我不確定這是否會做你想做的事,但如果你只對此感興趣來調試偶爾出現的宏問題(所以這不是你需要在每次編譯的消息中顯示的東西),以下內容可能會爲你工作。使用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
嗯,我不認爲我的客戶會很樂意把它添加爲依賴項,但這看起來像是存在證明。也許我應該去看看stringize.hpp – 2012-03-14 01:29:58
@JohnLawrenceAspden我更新瞭如何在沒有提升(或任何其他庫)的情況下做出答案。 – rob05c 2012-03-14 01:46:26