我在哪里可以找到组合字符串的C规范?

时间:2018-01-14 06:14:50

标签: c string specifications

当我阅读Xtables的源代码时,我发现了类似的内容。

pr_info("SRC=" NIP6_FMR "DST=" NIP6_FMR "\n",
        NIP6(iph->saddr), NIP6(iph->daddr));

我想知道为什么字符串作为组合字符串处理,效果是由pr_info宏引起的,还是C规范的一部分。所以,我编写了这段代码并发现它是C规范中定义的行为。

int main(void) {
    char a[] = "aaa" "bb";
    printf("%s\n", a);

    return 0;
}

规范的定义在哪里?我不知道如何搜索规范以及用什么词来表达行为。

1 个答案:

答案 0 :(得分:8)

6.4.5p8示例: -

  

这对相邻的字符串文字

     

"\x12" "3"生成单个字符串文字,其中包含值为'\x12''3' 的两个字符,因为   转义序列被转换为执行的单个成员   字符集恰好在相邻字符串文字串联之前。

此处也在6.4.5p5

中说明
  

在翻译阶段6中,指定的多字节字符序列   任何相邻字符序列和相同前缀字符串   文字标记连接成一个多字节字符   序列

此外,在5.1.1.2部分“翻译阶段”

  
      
  1. 连接相邻的字符串文字标记。
  2.   

强调我的