如何在gcc中显示编译时#define的值

如何在gcc中显示编译时#define的值,c,gcc,macros,c-preprocessor,pragma,C,Gcc,Macros,C Preprocessor,Pragma,到目前为止,我已经了解到: #define ADEFINE "23" #pragma message ("ADEFINE" ADEFINE) 这是可行的,但如果阿德芬不是一根弦呢 #define ADEFINE 23 #pragma message ("ADEFINE" ADEFINE) 原因: 警告:已忽略格式错误的“#pragma message” 理想情况下,我希望能够处理任何值,包括未定义的值。我不确定这是否能满足您的要求,但如果您只对调试偶尔出现的宏问题感兴趣(因此它不是您需要在每

到目前为止,我已经了解到:

#define ADEFINE "23"
#pragma message ("ADEFINE" ADEFINE)
这是可行的,但如果阿德芬不是一根弦呢

#define ADEFINE 23
#pragma message ("ADEFINE" ADEFINE)
原因:

警告:已忽略格式错误的“#pragma message”


理想情况下,我希望能够处理任何值,包括未定义的值。

我不确定这是否能满足您的要求,但如果您只对调试偶尔出现的宏问题感兴趣(因此它不是您需要在每次编译的消息中显示的内容),以下内容可能适合您。使用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;
}

要显示非字符串的宏,请执行以下操作:

如果您有/想要,您可以使用来为您完成:

#include <boost/preprocessor/stringize.hpp>
#define ADEFINE 23
#pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))
#包括
#定义ADEFINE 23
#pragma消息(“ADEFINE=”BOOST\u PP\u STRINGIZE(ADEFINE))

嗯,我认为我的客户不会很高兴将其作为依赖项添加,但这看起来像是存在的证明。也许我应该去看看stringize。hpp@JohnLawrenceAspden我更新了答案,说明了如何在没有boost(或任何其他库)的情况下执行此操作。您的链接不再处于活动状态:“stringify the macro”
#define STRINGIFY(s) XSTRINGIFY(s)
#define XSTRINGIFY(s) #s

#define ADEFINE 23
#pragma message ("ADEFINE=" STRINGIFY(ADEFINE))
#include <boost/preprocessor/stringize.hpp>
#define ADEFINE 23
#pragma message ("ADEFINE=" BOOST_PP_STRINGIZE(ADEFINE))