在:http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/
它提到了一个名为“宏定义”的指令。当我们说“宏”时,我们的意思是什么?
感谢。
答案 0 :(得分:3)
宏是一个预处理程序指令,用于定义在编译之前由预处理程序替换(或删除)的名称。
示例:
#define MY_MACRO1 somevalue
#define MY_MACRO2
#define SUM(a, b) (a + b)
然后,如果代码中的任何地方(字符串文字除外)都提到MY_MACRO1
或MY_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指令),而“宏”是定义的函数或表达式。
然而,除了语义之外,它们之间没有什么区别。