字符串化运算符

时间:2012-05-20 20:37:41

标签: c macros

以下代码如何正确编译,

#include <stdio.h>
#define stringer( x ) printf_s( #x "\n" )
int main() {
stringer( "In quotes when printed to the screen" );   
}

不应该扩展到

printf_s(""In quotes when printed to the screen""\n");

这是一个错误,因为printf_s中有嵌套的双引号

3 个答案:

答案 0 :(得分:3)

不,#运算符专门处理字符串文字。它必须\转义传递给它的字符串文字中的每个"。正确的扩展是:

printf_s( "\"In quotes when printed to the screen\"" "\n" );

答案 1 :(得分:2)

不,它已扩展为

printf_s("\"In quotes when printed to the screen\"" "\n");

最终会

printf_s("\"In quotes when printed to the screen\"\n");

并且应该打印

"In quotes when printed to the screen"

答案 2 :(得分:2)

在C中,相邻的字符串文字are concatenated

  

相邻的字符串文字在编译时连接在一起;这允许将长字符串拆分为多行,并且还允许在编译时将C预处理器定义和宏生成的字符串文字附加到字符串: