编译计算字符串文字的时间连接

时间:2013-07-11 15:42:07

标签: c string

我们可以连接相邻的字符串文字,如下所示:

puts( "ABC" "DEF" );

然而,当我尝试这样做时,MSVC失败了一个奇怪的错误:

puts( ("ABC") ("DEF") );

这意味着我可以执行单个计算输出字符串文字,如下所示:

puts( NUM_ELEMENTS>125?"WARNING":"OK" )

但我无法连接多个这些字符串文字输出,例如:

#define SOME_SETTING 0x0B //I sometimes wish there were binary literals
#define BIT_STR(x,n) ((x>>n)&1?"1":"0")
#define BIT_STR4(x) BIT_STR(x,3) BIT_STR(x,2) BIT_STR(x,1) BIT_STR(x,0)

...

puts( "Initializing some hardware setting: " BIT_STR4(SOME_SETTING) );

编辑: 所以我的问题是......连接编译时计算字符串文字的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

举例来说,

BIT_STR(SOME_SETTING, 3)确实可以在运行时计算:它导致(0?"1":"0"),这反过来导致指向常量字符串"0"的指针,而不是字符串文字不再。

字符串文字可以连接,常量字符串的常量指针也可以连接。这就是区别。