前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >typedef 与

typedef 与

作者头像
我与梦想有个约会
发布2023-10-20 16:20:06
1190
发布2023-10-20 16:20:06
举报
文章被收录于专栏:jiajia_dengjiajia_deng

众所周知,typedef与#define都可以将系统关键字定义为一个其他名字来使用,方便我们记忆,比如 #define PCHAR char* 与 typedef char* PCHAR;,两种方式定义出来的PCHAR都可以用来定义新的变量。但本质绝非那么简单。

#define自定义的名字我们成为“宏”,而typedef自定义的名字我们称为真正的别名。宏是在预编译期间的一个简单的替换操作,而typedef则并非是简单的替换。通过一个例子我们就可以清晰的发现两者的区别。 一段既有#define也有typedef的代码:

代码语言:javascript
复制
#define DPCHAR char*
typedef char* TPCHAR;
int main(int argc, char* argv[])
{
DPCHAR p1, p2;
TPCHAR p3, p4;
return 0;
}
在linux下我们使用 gcc -E 进行预编译后得到的文件如下:
# 1 “define.c”
1 ““
1 “<命令行>”
1 “define.c”
typedef char* TPCHAR;
int main(int argc, char* argv[])
{
 char* p1, p2;
 TPCHAR p3, p4;
 return 0;
}

我们很明显可以看到,使用#define定义的宏常量在预编译阶段就已经将代码进行了替换,这样编译出来的程序,p1是一个指针,而p2则只是一个单纯的char类型变量而已。 但 typedef 定义的别名则不然,p3和p4均是一个char*类型的指针。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档