请问各位通常在什么情况下会使用“宏”?
宏和函数的原理都知道,这个且不谈。
我看到微软的MFC或驱动框架WDM\WDF都用了大量的宏,这样用肯定是有微软的用意的。
难道仅仅是为了防止多次调用而节省资源,才定义这么多宏吗?
[解决办法]
微软使用宏有两大用意
1.效率高,MFC不用宏就得用多态,虚函数是C++效率低于C的最主要原因,C With Class和C的效率是差不多的
2.为了兼容性,MFC是个极其古老的框架,形成于90年代初,那时候C++还远远没有标准化,而C的标准化已经完成,所以MFC不敢用高级的C++语言特性,而用了大量的C特性,就是为了保证日后C++发生重大变化后仍能兼容,事实上M$也做到了
[解决办法]
私以为,在日常代码中,不必刻意去遵循某本书的价值观,C++教材喜欢吐槽C是众所周知的,按他的说法宏就该淘汰
我的原则是,绝不会用宏去做复杂的逻辑代换,这是非常难以调试的,这时候用内联函数代替
而常量,通常还是喜欢用宏
[解决办法]
[解决办法]
复杂的宏替换一般在代码已经稳定之后才去搞,属于最后性能优化的方面
比如zlib1.2.6就把gzgetc改成宏了