2013年(24)
发布时间:2013-01-08 10:08:44
先看一个经典的面试题:#include <stdio.h>#define f(a,b) a##b#define g(a) #a#define h(a) g(a) int main(){ printf("%s\n", h(f(1,2))); printf("%s\n", g(f(1,2))); return 0;}输出是:12f(1,2)原因就是宏替换的原则问题:当一个宏参数被放进宏体时,通常(注意,有例外)这个宏参数会首先被全部展开。当展开后的宏参数被放进宏体时,预处理器对新展开的宏体进行第二次扫描,并继续展开。例如:#define P......【阅读全文】
发布时间:2013-01-07 16:53:27
新年快乐,好好的玩了几天,张家港二日游让我有了较大的感触,苏南发展的真心好哦,想想老家的发展真的觉得是落后哦,回学校看了一些大牛的博客,貌似在假期中大牛们才有时间写博客。祝大家新年快乐,身体健康。 言归正传,在C语言中宏定义是比较有用的技巧,在Linux源码中经常使用一些宏定义,比如宏container_of()等都是经典的宏定义表示方式。在C++不再主张使用宏定义,但是宏定义实际上却是是一个非常有用的手段。实质上宏定义能够搞定的实现采用其它的实现也是可以的,宏定义的作用是简单的替代作用,掌握这个是理解的关键,以前在没有代码阅读量的时候总是......【阅读全文】