C ++ - 宏定义指令

时间:2011-01-22 08:48:58

标签: c++ macros

在:http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/

它提到了一个名为“宏定义”的指令。当我们说“”时,我们的意思是什么?

感谢。

3 个答案:

答案 0 :(得分:3)

宏是一个预处理程序指令,用于定义在编译之前由预处理程序替换(或删除)的名称。

示例:

#define MY_MACRO1 somevalue
#define MY_MACRO2
#define SUM(a, b) (a + b)

然后,如果代码中的任何地方(字符串文字除外)都提到MY_MACRO1MY_MACRO2预处理器将此替换为#define行中名称后面的内容

也可以有带参数的宏(如SUM)。在这种情况下,预处理器识别参数,例如:

int x = 1, y = 2;
int z = SUM(x, y);

预处理器替换如下:

int x = 1, y = 2;
int z = (x + y);

只有在替换之后,编译器才能编译生成的代码。

答案 1 :(得分:2)

宏是一个代码片段,由预处理器替换到您的程序中(在编译正确开始之前)。这可能是一个类似函数的块,也可能是一个常量值。

使用类似函数的宏时出现警告。请考虑以下代码:

#define foo(x) x*x

如果您致电foo(3),它将成为(并编译为)3*3(= 9)。相反,如果您拨打foo(2+3),它将变为2+3*2+3,(= 2 + 6 + 3 = 11),这不是您想要的。此外,由于代码已被替换,foo(bar++)变为bar++ * bar++,递增bar两次。

宏是强大的工具,但在尝试用它们做一些奇特的事情时,很容易用脚射击自己。

答案 2 :(得分:1)

“宏定义”仅指示它们是如何指定的(使用#define指令),而“宏”是定义的函数或表达式。

然而,除了语义之外,它们之间没有什么区别。