【发布时间】:2020-06-29 00:01:54
【问题描述】:
我真正需要知道的是在指令开始之前允许使用哪些字符,因为我们都知道在开始之前可以有 换行 字符和 空白 字符before (#) 的指令现在我阅读了有关此的 C 标准,并找到了以下定义来解释这一点:
预处理指令由满足以下约束的预处理标记序列组成:序列中的第一个标记是#预处理标记,它(在翻译阶段 4 的开始)是源文件中的第一个字符(可选地在不包含换行符的空格之后)或在包含至少一个换行符的空格之后。 "C standard - read here the definition"
现在我真正需要知道的是: 它们是什么意思
(可选在空格之后不包含“换行”字符)或在空格之后至少包含一个“换行”字符
不包含换行符
和
至少包含一个换行符
在上面的定义中我不明白我需要知道这到底是什么意思,我需要知道
可以出现换行符的位置是在 #token 之前还是在 #token 之后 C 标准没有说明可以出现换行符的位置 (它只声明“不包含换行符" 和 "包含至少一个换行符") (它没有说明在这种情况下换行符是否可以出现在 #token 之前或 #token 之后) 即使它已经说明了在上述情况下可以出现空白字符的位置(在 # 标记之前)
【问题讨论】:
-
即文件中的第一个非空白字符或一行中的第一个非空白字符的 C 语言。归结为
#是文件中任何行上的第一个非空白字符,以提供宏定义或预处理指令。 -
@DavidC.Rankin 谢谢。你能告诉我它们是什么意思吗?我的意思是换行符实际上可以出现在哪里
-
在 C 和
'\n'中是空格并且在很大程度上被忽略了。但是,当您谈论预处理标记或宏定义时,它们必须作为行中的第一个非空白字符出现。所以标准的那部分只是说如果它不是第一行,你必须在'#'之前有一个换行符。否则,将在很大程度上被忽略。
标签: c directive non-printing-characters