|
|
1
2
它所说的新行是在注释被一个空格字符取代后仍然存在的。当在包含该片段的段落的较大上下文中查看该片段时,这一点会更清楚。 具体来说,多行注释中的新行是 不 保留并且不终止预处理指令。 |
|
|
2
2
C/C++预处理器会剥离所有注释,但在查看预处理器输出时,通常会将源行保持在相同的行号。 这样,读取预处理器输出的编译器就可以为错误消息和警告打印正确的行号。 预处理器通常也保持所有空行的原样。 您还必须严格区分从源代码中删除的多行宏和它们何时展开。它们总是被移除 同时保留所有换行符 。它们总是被替换为 所有换行符已剥离 。两者都是完全独立的操作,彼此无关。
在过去,C预处理器总是在stdout上产生输出,而C编译器则从stdin中读取输出。预处理器发出内部
今天,预处理器内置在C编译器中以提高性能,但如果明确要求,您仍然可以查看中间结果。 注意:另请参阅下面的好评论:该标准并没有真正指定预处理器的文本输出在空白方面的样子。文本输出是特定于实现的。还有相当大的解释空间。定义的是至少有一个空格字符必须在哪里,并且所有标记都停留在其原始行上(或用其原始行标记),这样错误消息才有意义。 |
|
|
Timo · 如果宏变量后跟构成有效标识符的字符,则不会展开宏变量 7 年前 |
|
|
user3623498 · 在#if中更改变量时出现问题 7 年前 |
|
|
einpoklum · 来自#cmakedefine替换的意外结果 7 年前 |
|
|
Joseph Franciscus · C中预处理器方法的别名++ 7 年前 |
|
|
stoper · 防止同一宏在多个转换单元中具有不同的定义 7 年前 |
|
|
СеÑгей · MinGW中预处理器g++的奇怪行为 7 年前 |