代码之家  ›  专栏  ›  技术社区  ›  ezpz

C++预处理器字符串文字串接

  •  6
  • ezpz  · 技术社区  · 14 年前

    我发现 this 关于如何 C 预处理器应该处理字符串文字连接(第6阶段)。但是,我找不到关于C++中如何处理这个问题(C++使用 C 预处理器?).

    我问的原因是我有以下几点:

    const char * Foo::encoding = "\0" "1234567890\0abcdefg";
    

    哪里 encoding 是类的静态成员 Foo . 如果没有连接的可用性,我将无法编写这样的字符序列。

    const char * Foo::encoding = "\01234567890\0abcdefg";
    

    有什么完全不同的地方吗 \012 被解释。

    我无法访问多个平台,我很好奇我应该有多大的信心,上面的操作总是正确的-也就是说,我将永远 { 0, '1', '2', '3', ... }

    3 回复  |  直到 9 年前
        1
  •  10
  •   sbi    14 年前

    语言(C以及C++)没有“预处理器”。预处理器作为一个独立的功能单元,是一个实现细节。源文件的处理方式(如果由这样的调用定义) 翻译阶段 . C中的一个阶段,以及C++中的一个阶段涉及级联字符串文字。

    在C++语言标准中描述了2.1。对于C++(C++ 03),它是第6阶段。

    6相邻普通字符串文字 标记被连接起来。邻宽 字符串文字标记是 级联的

        2
  •  6
  •   James McNellis    14 年前

    是的,将按照您描述的方式处理,因为在第5阶段,

    字符常量中的每个源字符集成员和转义序列以及 字符串文本转换为执行字符的相应成员 套(C99_§5.1.1.2/1)

    C++ 03中的语言实际上是相同的:

    字符字符和字符串文本中的每个源字符集成员、转义序列或通用字符名称都被转换为执行字符集(C++ 03×2.1)/ 5的成员。

    所以,转义序列(比如 \0 )在第五阶段转换为执行字符集的成员,然后在第六阶段连接字符串文本。

        3
  •  0
  •   octopusgrabbus ufukgun    12 年前

    由于C++与C标准的一致性。大多数,如果不是全部,C++实现使用C预处理器,所以,是的,C++使用C预处理器。