当前位置:  开发笔记 > 数据库 > 正文

是否可以在C中打印预处理器变量?

如何解决《是否可以在C中打印预处理器变量?》经验,为你挑选了3个好方法。

是否可以在C中打印到stderr预处理器变量的值?例如,我现在拥有的是:

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR is greater than 10
#endif

但我想做的是:

#define PP_VAR (10)
#if (PP_VAR > 10)
    #warning PP_VAR=%PP_VAR%
#endif

C中这样的事情可能吗?



1> MattM..:

您可以在visual studio下打印出预处理器变量的值.以下打印出_MSC_VER的值:

#define STRING2(x) #x
#define STRING(x) STRING2(x)

#pragma message(STRING(_MSC_VER))

不确定这是多么标准.


它不是标准,但GCC,MSVC,CLANG ......(可能其他人也支持它)

2> Marc Abramow..:

这适用于GCC 4.4.3:

#define STRING2(x) #x
#define STRING(x) STRING2(x)
#pragma message "LIBMEMCACHED_VERSION_HEX = " STRING(LIBMEMCACHED_VERSION_HEX)

收益率:

src/_pylibmcmodule.c:1843: note: #pragma message: LIBMEMCACHED_VERSION_HEX = 0x01000017



3> Jonathan Lef..:

许多C编译器都支持#warning(但C标准未定义)。

但是,GCC至少不对后续数据进行预处理,这意味着很难看到变量的值。

#define PP_VAR 123
#warning "Value of PP_VAR = " PP_VAR
#warning "Value of PP_VAR = " #PP_VAR
#warning "Value of PP_VAR = " ##PP_VAR

GCC产生:

x.c:2:2: warning: #warning "Value of PP_VAR = " PP_VAR
x.c:3:2: warning: #warning "Value of PP_VAR = " #PP_VAR
x.c:4:2: warning: #warning "Value of PP_VAR = " ##PP_VAR


因此,当您说“很难看到变量的值”时,您真正的意思是看不到它。
推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有