宏扩展错误

阿吉特

我一直试图了解宏扩展,发现第二个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章