1

我确切需要知道的是在指令开始之前允许使用哪些字符,因为我们都知道在(#)之前的指令开始之前我们可以有换行符空白字符现在我阅读了关于这个的 C 标准并发现下面的定义解释了这一点:

预处理指令由满足以下约束的预处理标记序列组成:序列中的第一个标记是 # 预处理标记,(在翻译阶段 4 开始时)是源文件中的第一个字符(可选在白色之后不包含换行符的空格)或紧随其后的包含至少一个换行符的空格。 “C 标准 - 在这里阅读定义”

现在我真正需要知道的是:它们是什么意思

(可选地在不包含“换行”字符的空格之后)或在包含至少一个“换行”字符的空格之后

不包含换行符

至少包含一个换行符

是我在上面的定义中不明白的,我需要知道这到底是什么意思,我需要知道

换行符可以出现在 #token 之前还是 #token 之后 C 标准没有说明可以出现换行符的位置(它只声明“不包含换行符”和“包含至少一个换行符” character") (它没有说明在这种情况下,换行符是否可以出现在 #token 之前或 #token 之后)即使它已经说明了在上述情况下可以出现空白字符的位置(在 #token 之前)

4

1 回答 1

3

这一切基本上意味着要么#在行的开头,要么在给定的行之前只有空格#

这部分:

源文件中的第一个字符(可选在不包含换行符的空格之后)

#如果它位于文件的第一行,则允许在之前使用空格,而这部分:

或在包含至少一个换行符的空格之后。

允许#在任何后续行之前使用空格。

例如:

  #include <stdio.h>   // spaces before the first line
  #include <stdlib.h>  // spaces before another line, i.e, spaces and newline before a token
int x;   #include <string.h> // not allowed, other tokens preceed on same line
于 2020-06-29T00:11:51.760 回答