我真正需要知道的是指令开始之前允许使用哪些字符,因为我们都知道我们可以拥有new line字符和空白指令开始之前的字符前 ( # )现在我阅读了关于此的 C 标准,并找到了以下定义来解释这一点:
预处理指令由一系列满足以下约束的预处理标记组成:序列中的第一个标记是 # 预处理标记,它(在翻译阶段 4 开始时)是源文件中的第一个字符(可以选择在白色之后)不包含换行符的空格)或紧随包含至少一个换行符的空白的空格。“C 标准 - 请阅读此处的定义”
现在我真正需要知道的是:
他们是什么意思
(可选地在空格之后不包含“换行”字符) 或跟随空格至少包含一个“换行”字符
the
不包含换行符
and
至少包含一个换行符
上面的定义是我不明白的,我需要知道它到底意味着什么,我需要知道
换行符可以出现在 # token 之前还是 # token 之后,C 标准没有说明换行符可以出现在哪里(它只指出“不包含换行符”和“包含至少一个换行符”) (它没有说明在这种情况下换行符是否可以出现在 # 标记之前或 # 标记之后)即使它已经说明了在上述情况下空白字符可以出现的位置(在 # 标记之前)
这一切基本上意味着要么#
位于行首或者前面只有空格#
在给定的线上。
这部分:
源文件中的第一个字符(可以选择在不包含换行符的空格之后)
前面允许有空格#
如果它位于文件的第一行,而这部分:
或后面包含至少一个换行符的空白。
前面允许有空格#
在任何后续行上。
例如:
#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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)