宏扩展错误

Pet*_*ete 4 c c-preprocessor

我一直试图理解宏扩展,发现第二个printf发出错误.我期待第二个print语句生成与第一个相同的输出.我知道有字符串连接的功能.我发现很难理解为什么第一个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));
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 8

连接字符串文字就像"s1" "s2"是语言规范的一部分.只需将两个变量彼此相邻,就像string_1 string_2没有语言的一部分.

如果要连接两个字符串变量,请考虑使用strcat,但请记住为目标字符串分配足够的空间.