电商自建站,建网站需要多钱,如何在手机上搭建网站,河北seo推广平台宏#xff1f;提到这个词想必很多初学者吃过它的亏#xff0c;但是为什么#xff0c;一些程序员老鸟写一下代码时坚持使用宏呢#xff1f;带着这样的疑问#xff0c;下面我将对上面的问题一 一进行解答。 首先想一个问题#xff1f;如果一个功能#xff0c;用宏和函数都… 宏提到这个词想必很多初学者吃过它的亏但是为什么一些程序员老鸟写一下代码时坚持使用宏呢带着这样的疑问下面我将对上面的问题一 一进行解答。 首先想一个问题如果一个功能用宏和函数都可以实现你们会选择什么呢可能有的人会选择宏有的人会选择函数但是我想告诉你其实选择什么是要看场景的。 如果功能不是非常的复杂这个时候应该首先宏 宏在经过预处理阶段就已经完成了替换到了编译阶段计算机直接写出汇编指令对应的计算就可以了。而函数在此阶段计算机需要先写 创建函数栈帧 的汇编指令才可以写 与 实际计算 有关 的汇编指令还要考虑函数的返回值等问题。所以宏是最好的选择
如果功能非常的复杂这个时候应该首先函数 函数有宏不具有的优势函数在处理复杂问题时可以进行调试帮助我们化繁为简。但宏可以接受很多不同类型的参数且宏还可以传递类型说实话很泛泛不够精细化而且宏不可调试。
作为新手应该如何用好宏
这里我归纳出了3点建议 1.口诀 defi 定义宏 切记不加 ; 。 宏里有参数 括号来几副。 参数有增减 值得注意点。 这个是个人总结的一句口诀按照这个口诀,你将避免50%以上的出错记录。
下面我们来举个反例。
#define MUL(x,y) xy
int mian(int argc,char *argv[])
{ int a3; int b5; int cMUL(a,b)*ab;//在这里很多新手会想当然 8*35最后得到29但其实这是错误的 //其实真确的结果应该是 35*35最后得到23。 return 0;
}
其实解决方法很简单 我们可以这样写
#define MUL(x,y) ((x)(y))//给参数自己加上括号还有就是参数整体加上括号
还有很多反例我在这里就不一 一赘述了上面的例子是说口诀的中间两句下面我再给口诀的最后两句举个例子。
#define MAX(x,y,z) ((x)(y)?(z):(x))
int mian(int argc,char *argv[])
{ int a3; int b5; int c6; int dMAX(a,b,c);//这个计算过程是这样的 //ab?c:a //a和b比较 a不大于比 a从3-4 b从5-6 //选择后者a a从4-5 a5 b6 c6 d4(第一次变第二次没变的a) printf(a%d b%d c%d d%d,a,b,c,d); return 0;
}
这出现宏中的参数带/--大家遇到这种题一定要把式子带到里边一点点的算这种操作在日常写代码的时候不建议使用这会带来很严重的副作用。 2.#在宏的作用 #宏参数名 可以让参数名在字符串中灵活变换 举个例子 #define PRINT(a,b,c) printf(#a%d #b %d#c %d, a, b, c)
#includestdio.h
int main() { int a 3; int b 5; int c 6; PRINT(a,b,c);//这里打印的结果是a3 b5 c6 return 0; }
从这里看出我们成功的把参数本身的名字和字符串拼接到了一起。 3.##在宏的作用 ##宏参数名 可以让常量名合并 举个例子 #define CONNECT(x,y) x##y
#includestdio.h
int main() { int ab 3; printf(ab%d\n, ab); printf(ab%d,CONNECT(a, b));//这里打印的结果是 ab3 ab3 return 0; }
从这里可以看出我们很好的实现了常量名的合并使用。
那么今天就写到这里吧不知不觉已经到了深夜1点40希望大家给我点个赞给我更多的鼓励我会坚持更新的例子是为了让读者们能够更好的理解宏烦请各位大佬高抬贵手不要喷我