以下代码如何正确编译,
#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中有嵌套的双引号
答案 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预处理器定义和宏生成的字符串文字附加到字符串: