在C语言的翻译阶段5和6中,什么时候空白显着?

回顾一下,标准中描述了阶段5-7:

  • 字符常量和字符串文字中的每个源字符集成员和转义序列都被转换为执行字符集的相应成员; 如果没有相应的成员,则将其转换为除空(宽)字符以外的实现定义的成员。 7)
  • 相邻的字符串文字标记被连接在一起。
  • 分隔令牌的空白字符不再重要。 每个预处理令牌都被转换为令牌。 所产生的令牌在语法和语义上被分析并翻译为翻译单元。
  • 现在我同意第7阶段的空白字符不再显着,但在阶段4之后已经无法摆脱它们了? 有没有一个例子,这会有所作为?

    当然,应该认识到,删除分隔标记的空白字符在此阶段不起作用,因为阶段4之后的数据由预处理标记组成。 这个想法是在早期阶段摆脱分隔预处理令牌的空间。


    考虑这个源代码

    char* str = "some text"   " with spaces";
    

    在阶段5中,这被转换为这些令牌(每行一个令牌):

    char
    *
    str
    =
    "some text"    
    " with spaces"
    

    这里重要的是“一些文本”和“带空格”中的空格。

    之后,令牌之间的所有空间(见上)都会被忽略。

    如果你在步骤5之前删除空格,你会得到其他字符串文字,如“sometext”

    链接地址: http://www.djcxy.com/p/73291.html

    上一篇: When are whitespace significant in translation phases 5 and 6 in C language?

    下一篇: C translation phases concrete examples