分享

C语言中关于宏定义的各种问题

 ID被吃 2016-03-23
-------C陷阱与缺陷 第六章
1、不能忽视宏定义中的空格
如 #define f (x) ((x)-1) 意思为 f 代表 (x) ((x)-1)
#define f(x) ((x)-1) 意思为f(x)代表 ((x)-1)
2、所有的宏在编译器预编译时就进行替换。
3、宏并不是函数(例子略)
4、宏并不是语句(例子略)
5、宏并不是类型定义
#define 是否可以代替 typedef ???
C语言支持一种叫做typedef的机制,它允许你为各种数据类型定义新的名字。但是可以用#define 代替
typedef 么?
答案是不可以,至少在某些情况下是不可以的。关于两者的区别有很多,从编译角度来讲,#define会在
预编译的时候,就会替换define的内容,而typedef不是。
论实现的效果上,有一种情况#define是不能代替typedef的,如:
typedef int* PINT;
PINT p1,p2;//这两条语句的意思是定义了两个int型的指针。
可如果改成#define之后呢?请看如下:
#define int* PINT
PINT p1,p2;//这条语句再预处理之后就会将宏替换掉,变成 int*p1,p2;意思是定义了一个int型的指针p1,
和一个int型的常量p2!!!
所以在这种情况下,#define是不能替换typedef的!!!!!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多