我现在学东西仍停留在知其然而不知其所以然的阶段,工作催赶着要优先得到结果,而不关心实现过程。最好就是能直接在Github上找到合适的代码粘过来用。这样做的缺点很明显,就像搬砖的工人,只能有一些工程经验,也许能保证东西好用,但美丑就不再控制范围内了。自己的孩子不听自己的话让人无可奈何的懊恼,希望未来有一天能知其所以然,成为算法设计师。
这里总结一点关于宏的小经验,未来再学习为什么宏要这样用:
1.取代Magic Number,程序中有意义的常量可以用宏代替。(为什么不是Global?)
2.防止重定义(#ifndef…else…#endif)
3.编译宏(在某些系统下,可以把宏定义传递给编译器,目前没有遇到)
4.应尽量避免使用宏函数(极容易出现难以预料的问题)
5.宏函数(用于简化操作,前提是展开前后代码量相差不大,即很小的函数,可以看做是用于代码生成)
6.效率方面,宏函数>内联函数>普通函数(但是一定不要因为效率问题使用宏,付出的代价很高)
7.某些时候可以做一些函数不能做的事:
#define fun(dst, src) strcpy(dst, #src)
//fun(buff,abc) 相当于 strcpy(buff,“abc”)
#define fun(arg) my##arg
//fun(ABC) 相当于 myABC
#define fun(a,b) a=#@b
//fun(x,y) 相当于 x='y'