【问题标题】:Where does predefined macros reside in C?预定义的宏在 C 中的什么位置?
【发布时间】:2020-02-09 10:48:12
【问题描述】:

我想知道预定义的宏在哪里定义和驻留?

预定义宏是在编译器或预处理器中定义的,它有一个字典来保存源代码中的预定义宏。

我的意思是__FILE__宏在编译器中有一个定义和等价值,并且在编译器中已经定义了是真的吗?

【问题讨论】:

  • __FILE____LINE__ 和其他宏在预处理时被 preprocessor 替换,就像所有其他宏一样。
  • 它们没有在任何地方定义。你认为这会怎样?
  • 它们被内置在预处理器中并有效地充当关键字。
  • 参见例如Standard Predefined Macros 用于 GCC,其他编译器也是如此。
  • @Nazim 远不清楚你在这里实际问的是什么。 当然预定义的宏会以某种方式在预处理器的源代码中体现出来。否则他们将无法工作。但在每种情况下,具体如何做到这一点取决于作者,并且可能也因实际宏而异。

标签: c compiler-construction preprocessor language-concepts predefined-macro


【解决方案1】:

The C Preprocessor, For GCC Version 9.2.0,第 3.7 章(预定义宏)说:

预定义了几个类似对象的宏;您可以在不提供定义的情况下使用它们。

以后,例如

__LINE__ -- 该宏以十进制整数常量的形式展开为当前输入的行号。虽然我们称它为预定义宏,但它是一个非常奇怪的宏,因为它的“定义”会随着源代码的每一行而改变


这意味着在任何地方都没有这些宏的具体定义。在预处理期间,C 预处理器会跟踪它当前正在处理的文件,并相应地替换 __FILE____LINE__ 和其他“特殊”宏。

【讨论】:

  • 它没有解释这个问题:“这些宏是从哪里来的?”。是编译进去的吗?还是不行?
  • 我不明白它是怎么做到的。预处理器自己提供定义,我认为这很清楚。第一句是这么说的。 “编译入”是什么意思?
猜你喜欢
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多