在:http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/C++ - 宏定义指令
它提到了一个名为 “宏定义” 指令。当我们说“微距”时,我们的意思是什么?
感谢。
在:http://www.learncpp.com/cpp-tutorial/110-a-first-look-at-the-preprocessor/C++ - 宏定义指令
它提到了一个名为 “宏定义” 指令。当我们说“微距”时,我们的意思是什么?
感谢。
宏是由预处理程序(在编译正确开始之前)被代入您的程序的代码片段。这可能是一个功能块,或者它可能是一个常数值。
使用函数式宏时的警告。请看下面的代码:
#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
递增两次。
宏是强大的工具,但它可以很容易地拍摄自己的脚,而试图做一些与他们看中的东西。
宏是一个预处理器指令,用于定义在编译之前预处理器将替换(或删除)的名称。
例子:
#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);
仅此更换后的编译器得到编译生成的代码。
“宏定义”仅指示它们是如何指定的(使用#define指令),而“宏”是定义的函数或表达式。
但是,除了语义之外,它们之间几乎没有什么区别。
感谢您的回复。关于“#定义SUM(a,b)(a + b)”,我们应该总是包括a + b之间的+ b吗?谢谢。 – Simplicity 2011-01-22 09:32:19
@SWEngineer在这种情况下,它不会使用圆括号,但考虑以下代码:int z = SUM(a,b)* 3;如果SUM没有括号定义,则会扩展为int z = a + b * 3 ;`,那可能不是你想要的。 – Fiktik 2011-01-22 09:38:34