我一直在尝试理解宏扩展,并发现第二个printf发出错误。我期待第二个print语句生成与第一个相同的输出。我知道有字符串连接的功能。我发现很难理解为什么第一个印刷语句有效,第二个没有。
#define CAT(str1, str2) str1 str2
void main()
{
char *string_1 = "s1", *string_2 = "s2";
printf(CAT("s1", "s2"));
printf(CAT(string_1, string_2));
}
答案 0 :(得分:8)
连接字符串文字,如"s1" "s2"
,是语言规范的一部分。只需将两个变量放在一起,就像string_1 string_2
一样。
如果要连接两个字符串变量,请考虑使用strcat
,但请记住为目标字符串分配足够的空间。
答案 1 :(得分:1)
尝试手工进行预处理"
CAT
应该接受2个输入变量,并一个接一个地打印它们,两者之间有空格。所以...如果我们预处理您的代码,它就会变成:
void main()
{
char *string_1 = "s1", *string_2 = "s2";
printf("s1" "s2");
printf(string_1 string_2);
}
虽然编译器会自动将"s1" "s2"
连接到"s1s2"
,但string_1 string_2
的语法无效。