C语言中翻译阶段5和6中的空格何时显着?

时间:2015-08-07 09:47:06

标签: c language-lawyer

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

  
      
  1. 字符常量和字符串文字中的每个源字符集成员和转义序列都将转换为相应的成员   执行字符集;如果没有相应的会员,   它被转换为实现定义的成员而不是   null(宽)字符。 7)
  2.   
  3. 连接相邻的字符串文字标记。
  4.   
  5. 分隔标记的空白字符不再重要。每个预处理令牌都转换为令牌。所结果的   令牌在语法和语义上被分析并翻译为   翻译单位。
  6.   

现在我同意白色空间角色在第7阶段不再重要,但是在第4阶段之后还不能摆脱它们吗?有没有一个例子可以产生影响?

当然应该意识到,在此阶段删除分隔令牌的空白字符不起作用,因为第4阶段之后的数据包含预处理令牌。我们的想法是在早期阶段摆脱分隔预处理令牌的空间。

1 个答案:

答案 0 :(得分:0)

考虑这个源代码

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

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

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

这里的空格很重要"一些文字"和"空格"。

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

如果在步骤5之前删除空格,则会得到其他字符串文字,例如" sometext"