#define 宏实现函数功能的问题 情形1 #define free_ptr(p) \ if(p) delete p; p = nullptr; 在调用free_ptr(p)的地方展开看这段代码: if(p) delete p; p = nullptr; 其实判断条件if(p),只对delete p 有效.不管if(p)是否满足执行条件p =nullptr都会执行.这么写可能直观一点 if(p) delete p; p = nullptr: 显然这种操作和我们的意图是不一样的. 情形2 #de…
定义了一个宏定义形式的"函数": #define  SUM8(YY)\ {\ int Y = YY>>2;\ ...\ } 然后使用的时候,传入了一个同名的变量Y: int  Y = Ywin[x]; SUM8(Y) 本意是想展开成int Y = Ywin[x]>>2; 但实际上#define只是把参数名(YY)替换,与函数形式不同,其实展开的结果变成了: int Y = Ywin[x]; { int Y = Y>>2;//仅仅把YY替换成参数Y }…
要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义.那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍. 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义:   #define MAX( a, b) ( (a) > (b) (a) : (b) ) 其次,把它用函数来实现: int max( int a, int…
1 #define的概念  #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本.  该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义.  (1) 简单的宏定义:  #define <宏名> <字符串>  例: #define PI 3.1415926  (2) 带参数的宏定义  #define <宏名> ( <参数表>) <宏体>  例: #define A…
       #define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加.       如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说,并不像业务…
iOS :漫谈#define 宏定义 #define宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多.但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加. 如果想成为一个能写出漂亮优雅代码的开发者,宏定义绝对是必不可少的技能(虽然宏本身可能并不漂亮优雅XD).但是因为宏定义对于很多人来说…
在 C 语言中,我们都知道可以用宏定义来编写函数,一般称为宏函数.如果一个宏函数比较复杂,那么在编写这样的宏函数是有一定技巧和注意事项的.文章给出一些我认为值得关注的地方,以及一些注意事项(个人建议),最后介绍了一种使用 do-while 语句来编写宏定义函数的技巧.下面我将从简单到复杂,以便于大家理解. 一个简单的例子 宏定义函数最简单的情况便是只有一条语句.下面我给出了四个例子,请仔细观察各个例子之间的区别,并尝试思考哪些是可以正确运行的. /* 例子 1 */ #include <stdi…
1.#define宏的用法 #define用宏名代替一个字符串,这样便于修改,提高了程序的可移植性.编译器在编译预处理时只对宏做文本替换,而不进行类型检查,所以替换后可能产生一些副作用. 带参数的宏类似于函数调用,但是宏替换不是函数,二者不是一回事. #define square(n) (n)*(n) for(int i=1;i<6;i++) printf("%d/n",square(i++)); 以上语句执行输出的结果为:1,9,25 因为square(i++)被替换为(i++…
#define   Add(a,b)   ((a)+(b)) #define Max(a,b) ((a)>(b)?(a):(b)) 这就定义了一个假的函数 说白了就是字符串替换 这样在写代码时能简化,省去了多打几个括号的功夫 但是,它仅仅做的是替换,会有点问题 拿算法笔记上面的例子来说吧 #define CAL(x)  (x*2+1) 下面在函数中调用的时候,如 a=1; CAL(a+1) 值为多少呢  (1+1)*2+1=5? 其实是 1+1*2+1=4 另外,#define 宏定义中 还可以…
函数定义 C 语言中的函数定义的一般形式如下: return_type function_name( parameter list ) { body of the function } 在 C 语言中,函数由一个函数头和一个函数主体组成.下面列出一个函数的所有组成部分: 返回类型:一个函数可以返回一个值.return_type 是函数返回的值的数据类型.有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void. 函数名称:这是函数的实际名称.函数名和参数列表一起…