宏扩展错误

时间:2015-11-02 12:37:10

标签: c c-preprocessor

我一直在尝试理解宏扩展,并发现第二个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));
}

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的语法无效。