【问题标题】:Where can I find the C specification for combining strings?在哪里可以找到组合字符串的 C 规范?
【发布时间】:2018-01-14 06:14:50
【问题描述】:

当我阅读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;
}

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

【问题讨论】:

  • 你可以找到它here。它是 N1570 的在线版本,是 ISO 标准发布之前 C11 的最后一个草案。标准本身需要买,但草案很接近。
  • 如果您更早地查看代码,您可能会发现 #define NIP6_FMR "%p"(或类似的东西)定义了 格式说明符 将替换 NIP6_FMR 常量以完成格式字符串.

标签: c string specifications


【解决方案1】:

来自6.4.5p8的一个例子:-

这对相邻的字符串字面量

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

6.4.5p5中也有说明

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

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

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

强调我的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 2023-04-10
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多