Stringify 预处理器使用宏创建带空格的字符串
Stringify preprocesor using macros to create a string with spaces
我正在尝试使用一些宏为我的 GUI 标题创建一个带空格的字符串,我有这个 resource.h:
#define QUOTE(s) #s
#define xstr(s) QUOTE(s)
#define PACKAGE_NAME "SoundTest"
#define PACKAGE_VERSION_MAYOR 1
#define PACKAGE_VERSION_MINOR 8
#define PACKAGE_VERSION xstr(PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
#define PACKAGE_STRING xstr(PACKAGE_NAME PACKAGE_VERSION)
以上在我的 window 标题中产生了这个输出:"SoundTest" "1.8"(带引号);
我想要这个输出:SoundTest 1.8(不带引号)。有什么想法吗?
这行得通吗,虽然它不是最好的解决方案?
#define PACKAGE_NAME SoundTest
#define PACKAGE_VERSION_MAYOR 1
#define PACKAGE_VERSION_MINOR 8
// not using this actually
#define PACKAGE_VERSION xstr(PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
#define PACKAGE_STRING xstr(PACKAGE_NAME PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
PACKAGE_NAME
中已有引号:
#define PACKAGE_NAME "SoundTest"
因此,如果您对 PACKAGE_NAME
进行字符串化,您也会对引号进行字符串化,从而得到类似 "\"SoundTest\""
的结果。 (请记住,C 预处理器只处理字符。它不理解 C 数据类型。)
幸运的是,C 允许您通过一个接一个地编写字符串文字来连接它们,因此,例如,"SoundTest" " " "1.8"
是一个字符串文字,就像它被写成 "SoundTest 1.8"
.您可以在这里利用它:
#define PACKAGE_VERSION xstr(PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
#define PACKAGE_STRING PACKAGE_NAME " " PACKAGE_VERSION
我正在尝试使用一些宏为我的 GUI 标题创建一个带空格的字符串,我有这个 resource.h:
#define QUOTE(s) #s
#define xstr(s) QUOTE(s)
#define PACKAGE_NAME "SoundTest"
#define PACKAGE_VERSION_MAYOR 1
#define PACKAGE_VERSION_MINOR 8
#define PACKAGE_VERSION xstr(PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
#define PACKAGE_STRING xstr(PACKAGE_NAME PACKAGE_VERSION)
以上在我的 window 标题中产生了这个输出:"SoundTest" "1.8"(带引号); 我想要这个输出:SoundTest 1.8(不带引号)。有什么想法吗?
这行得通吗,虽然它不是最好的解决方案?
#define PACKAGE_NAME SoundTest
#define PACKAGE_VERSION_MAYOR 1
#define PACKAGE_VERSION_MINOR 8
// not using this actually
#define PACKAGE_VERSION xstr(PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
#define PACKAGE_STRING xstr(PACKAGE_NAME PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
PACKAGE_NAME
中已有引号:
#define PACKAGE_NAME "SoundTest"
因此,如果您对 PACKAGE_NAME
进行字符串化,您也会对引号进行字符串化,从而得到类似 "\"SoundTest\""
的结果。 (请记住,C 预处理器只处理字符。它不理解 C 数据类型。)
幸运的是,C 允许您通过一个接一个地编写字符串文字来连接它们,因此,例如,"SoundTest" " " "1.8"
是一个字符串文字,就像它被写成 "SoundTest 1.8"
.您可以在这里利用它:
#define PACKAGE_VERSION xstr(PACKAGE_VERSION_MAYOR.PACKAGE_VERSION_MINOR)
#define PACKAGE_STRING PACKAGE_NAME " " PACKAGE_VERSION