当我们像下面这样创建宏时,我对宏有疑虑
#define DATA 40在哪里可以创建数据?我还需要知道数据的大小和类型?
在java中,我们创建宏和数据类型,
那么宏函数呢?它们都是内联函数?
发布于 2013-12-27 18:36:15
宏本质上是文本替换。
DATA不存在于预处理阶段之外。编译器永远看不到它。因为没有创建变量,所以我们不能讨论它的数据类型、大小或地址。
发布于 2013-12-27 18:46:52
从字面上讲,宏被粘贴到代码中。它们不是“解析”的,而是扩展的。编译器看到的不是DATA,而是40。这就是为什么你必须小心,因为宏不像普通的函数或变量。参见gcc's documentation。
宏是一段已命名的代码片段。每当使用该名称时,它都会替换为宏的内容。有两种宏。它们的主要不同之处在于它们在使用时的外观。类对象宏在使用时类似于数据对象,类函数宏类似于函数调用。
您可以将任何有效的标识符定义为宏,即使它是C关键字。预处理器对关键字一无所知。如果您希望对不理解关键字的旧编译器隐藏const之类的关键字,这将非常有用。但是,在编译C++时,定义的预处理器运算符(请参见Defined)永远不能定义为宏,并且C++的命名运算符(请参见C++命名运算符)不能是宏。
发布于 2013-12-27 18:36:03
宏不存在于您的最终可执行文件中。宏是在pre-processing阶段处理的compilation.You可以找到更多关于宏的here的信息
https://stackoverflow.com/questions/20799101
复制相似问题