重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
当出于某些原因需要对数据做出修改,只要修改宏定义就行了,而不必在整个源文件中修改。
公司主营业务:成都做网站、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出沈北新免费做网站回馈大家。
而至于某些人说的可以加快CPU处理速度、宏运行的速度更快,我并不认同。
编译器对于源文件首先是进行宏替换,然后再编译连接,不管是对于编译后得到程序的运行效率还是编译器编译速度都没有提升
预处理运算符# #为宏扩展提供了一种连接实际变元的手段。如果替换文本中的参数用 # #相
连,那么参数就被实际变元替换, # #与前后的空白符被删除,并对替换后的结果重新扫描。例
如,下面定义的宏p a s t e用于连接两个变元:
#define paste( front, back ) front ## back
从而宏调用paste(name, 1)的结果是建立单词n a m e 1。
不仅仅是函数,定义和宏的主要区别在预编译的时候,定义在预编译的时候的主要操作时分配空间或内存,宏是进行了替换。比如#define n1000 ,预编译的时候所有的n此时全部换成了1000,若int n =1000;只是这个n是1000,如果后边还有用到的n,此时还可以理解是n,而不是1000
#define sort (int *a)
但以数组名即数组首地址作为参数传递,不能实现任何功能。。。
如 #define PI 3.1514
那么在程序中可调用PI求与角度有关的数据。
#define s(x) x+x
那么在程序中出现调用s(x)的就直接用x+x代入就好了,注意,不是代入结果,而是将表达式代入。。。
的确是不可以当函数的参数,但是可以换一个间接的思路。
将宏定义放在另一个函数里,通过取地址的方式来把你原先想去处理的参数进行处理。
示例如下:
#includestdio.h
#define cal(m) {m = m + 10;}
int main(void)
{
int Val_0 = 20;
test(Val_0);
printf("%d", Val_0);
system("pause");
}
int test(int *n)
{
cal(*n);
printf("hello\n");
return 0;
}
会出错吧,宏定义替换的是一个常数,如果是用宏来计算什么的话,也是将函数过程给放上去,得出值后被宏名替换,直接替换函数名是不可行的