宏变量在哪里创建?和变量的大小?

时间:2013-12-27 10:34:01

标签: c macros

我怀疑宏,当我们创建如下

      #define DATA 40

哪里可以创建DATA?我还需要知道尺寸和数据的类型吗?

在java中,我们创建宏以及数据类型

那么宏功能呢?它们都是内联函数?

4 个答案:

答案 0 :(得分:3)

宏本质上是文本替换。

DATA在预处理阶段之后不存在。编译器永远不会看到它。由于没有创建变量,我们无法谈论其数据类型,大小或地址。

答案 1 :(得分:2)

宏按字面意思粘贴到代码中。它们不是“解析”,而是扩展。编译器看不到DATA,而是40。这就是为什么你必须小心,因为宏不像普通的函数或变量。请参阅gcc's documentation

  

宏是代号的片段,它已被赋予名称。每当   使用该名称,它将被宏的内容替换。那里   是两种宏。它们的大部分区别在于它们的外观   当他们被使用。类似对象的宏类似于数据对象   used,类似函数的宏类似于函数调用。

     

您可以将任何有效的标识符定义为宏,即使它是C   关键词。预处理器对关键字一无所知。这个   如果你想隐藏一个关键字,如const,可能会很有用   较旧的编译器,不理解它。但是,预处理器   operator defined(参见Defined)永远不能定义为宏,而且   C ++的命名运算符(参见C ++命名运算符)不能是宏   你正在编译C ++。

答案 2 :(得分:0)

最终的可执行文件中没有

宏。它们仅在您的源代码中出现。在编译的pre-processing阶段处理.macro。您可以找到有关宏here的更多信息

答案 3 :(得分:0)

#define之类的预处理程序指令在编译的预处理阶段被替换为相应的文本,并且(几乎)从未在最终的可执行文件中表示。