typedef和#define:剪不断,理还乱。

tjjmmtds 2003-08-10 02:10:07
问个很菜的问题:预编译是什么时候,编译又是什么时候进行的?——我知道预编译是在编译之前的预处理动作,仅此而已。可是一个生成了exe的文件就都不会存在这两者了吧?那么对编译器来说,何必还要分什么预编译和编译的过程呢?它们有什么区别吗(指的是对我们用户而言,而不是它们的机制)?反正不都是在要运行前都得去做的事吗?

比如说typedef和define吧,typedef说是在编译时处理的,而define在预编译时处理。——这有什么区别呢?反正结果都一样,比如这样两个例子不都是一样的吗?
例1.
typedef int COUNT;
COUNT i,j;

例2.
#define COUNT int
COUNT i,j;
...全文
310 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
loyyer 2003-08-10
  • 打赏
  • 举报
回复
to 楼主:
你不要太小看#define 和#typedef了,他们在很多时候可以简化我们的程序,可读性和可改性增强。比如你在一个大的程序里边要多次用到一个数据,如5000(统计人数),就可以#define 5000 NUM;当你在调试程序的时候,你该不会输入5000个数据进行调试吧。那时,你就可以#define 10 NUM,尽量时数据小。看,多方便!只需改一处,编译器就帮我们把全部的数据都改了。调试完成,在改回来,不是很好吗?这就比我们一个一个的去改方便多了,也直观多了啊!】
#typedef也一样,定义一个函数指针:#typedef int (*FuncPointer)(int a,int b);以后,凡是定义此类的函数指针,就直接 FuncPointer fp;看,多方便。
qiaoguojun 2003-08-10
  • 打赏
  • 举报
回复
up
cleanduo 2003-08-10
  • 打赏
  • 举报
回复
up
XiaoRong2sxh 2003-08-10
  • 打赏
  • 举报
回复
请问各位大哥:
typedef int (*PF)();

是什么意思???
leafxx 2003-08-10
  • 打赏
  • 举报
回复
#define是在预编译的时候处理的,
typeded是在编译时处理的,这两者是不同的,实际上它并不是简单的字符替换
使用typedef有利于程序的通用与移植
lifanxi 2003-08-10
  • 打赏
  • 举报
回复
typedef和#define是完全不同的两个东西,最好还是不要混为一谈。
typedef用于定义数据类型的别名,是编译期的行为。
#define则是预编译时进行的工作,本质是字符串替换的行为。

#define在C++中的作用比在C中要小一些,因为C++的内联函数和常量定义可以在很多场合取代#define。用于防止头文件反复包含的条件编译是#define的一个很重要的用途,条件编译也是在预编译时完成的。

typedef决不可能由#define来替代,比如在一个比较复杂的类型定义时:
typedef int (*PF)();
用#define做就不太好看了吧。
tjjmmtds 2003-08-10
  • 打赏
  • 举报
回复
各位老大,说了和白说一个样!
我自己都写的清清楚楚了,知道他们的物理区别,但是对用户来说,没感觉。
还有2楼,你说那个叫条件编译拜托!
psprite 2003-08-10
  • 打赏
  • 举报
回复
#define COUNT int
是对字符串的替换```如楼上那位朋友所说的
typedef int COUNT;
是对与类型的定义 有本质的差别```typedef 对于那些用惯了其他语言定义类型的人如此定义显得更得心应手而且灵活
西江残月 2003-08-10
  • 打赏
  • 举报
回复
知道怎么用就行了!
icbm 2003-08-10
  • 打赏
  • 举报
回复
编译预处理就是字符串替换。
#define COUNT int
COUNT i,j;
经过编译预处理后实际上就是:
int i,j;
MaiCle 2003-08-10
  • 打赏
  • 举报
回复
#ifndef XXX
#define XXX

#endif

---- 这个功能,typedef能做到吗?

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧