作用:
在C或C++语言中,“宏”分为有参数和无参数两种。
被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。
宏定义的作用范围仅限于当前文件,即file1.c中定义#definePI3.14,在file2.c中该宏定义不起作用;通过将#definePI3.14
定义在common.h中,file1.c和file2.c分别#include"common.h"的方式,该宏定义在file1.c和file2.c中都起作用。
扩展资料
无参宏定义
无参宏定义的一般形式为:#define 标识符 字符串
其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。
例如:
#define M (a+b) 它的作用是指定标识符M来代替表达式(a+b)。在编写源程序时,所有的(a+b)都可由M代替,而对源程序作编译时,将先由预处理程序进行宏代换,即用(a+b)表达式去置换所有的宏名M,然后再进行编译。
程序1:
#include<stdio.h>
#define M (a+b)
int main(void)
{
int s,a,b;
printf("inputnumbera&b:");
scanf("%d%d",&a,&b);
s = M*M;
printf("s=%d\n",s);
}
上例程序中首先进行宏定义,定义M来替代表达式(a+b),在 s= M * M 中作了宏调用。在预处理时经宏展开后该语句变为: S=(a+b)*(a+b) 但要注意的是,在宏定义中表达式(a+b)两边的括号不能少。否则会发生错误。
如当作以下定义后:#define M (a)+(b) 在宏展开时将得到下述语句:S= (a)+(b)*(a)+(b)
对于宏定义还要说明以下几点:
1、宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。
2、宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
3、宏定义其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。(有关#undef 请查阅其它资料)
参考资料:
推荐于2017-11-28
#define 是宏定义,定义一个全局变量,在整个文件中都可以使用。
如 #define a 3
即认为a 等同于3
int d=10%a;//等同于 int d=10%3;
结果得 d = 1
2013-08-25
比如说#define a b;
意思就是说当程序中遇到a的时候,将a替换为b
2013-08-25
的意思是
在下面的程序里面
所有的a都替换成b
这完全是字符替换
所以使用的时候要小心
如果你
#define a x+y
后面用a*a的时候
就会替换为x+y*x+y
而不是(x+y)*(x+y)