我一直试图了解宏扩展,发现第二个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));
}
尝试“手工”进行预处理:
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
是无效的语法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句