社区
C语言
帖子详情
#define和typedef的区别
sms88
2005-04-28 08:28:30
#define和typedef都是进行替名?
...全文
1585
15
打赏
收藏
#define和typedef的区别
#define和typedef都是进行替名?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cppprogramlover
2005-05-01
打赏
举报
回复
up
guofu_x
2005-04-29
打赏
举报
回复
lumenshan(babel)讲的非常透彻
QunKangLi
2005-04-28
打赏
举报
回复
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。
n88n
2005-04-28
打赏
举报
回复
typedef表示"定义类型",但用"别名"来描述更精确
#define 简单的告诉预处理器这个标记被定义.
xzgyb
2005-04-28
打赏
举报
回复
引用C专家编程的
#define int_ptr int *
int_ptr a, b; //相当于int * chalk, cheese; 只是简单的宏替换
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
所以区别还是很大的
newpuple
2005-04-28
打赏
举报
回复
同意whoho(在北方流浪) 的说法:
——————————————————————
#define是在于处理阶段进行替换的
typedef是在编译阶段进行处理的
#define仅仅作为替换处理,没有类型检查
typedef是有类型检查的,也有作用域的概念更安全一些
void fun()
{
#define A int
}
void gun()
{
//在这里也可以使用A,因为宏替换没有作用域,
//但如果上面用的是typedef,那这里就不能用A
}
yuchengliu
2005-04-28
打赏
举报
回复
顶!
#define是定义宏,是预处理命令,在编译之前进行宏展开, 只是做简单的替换, 不进行计算.
typedef是定义已有类型的别名。
winstonch
2005-04-28
打赏
举报
回复
1.从处理阶段区分:#define是在预处理阶段处理的,而typedef是在编译阶段处理.
2.从功能上讲:#define可以给类型起别名,也可以给常量,变量等等起别名,而且还可以用作编译开关, 而typedef只用用作定义类型别名.
whoho
2005-04-28
打赏
举报
回复
#define是在于处理阶段进行替换的
typedef是在编译阶段进行处理的
#define仅仅作为替换处理,没有类型检查
typedef是有类型检查的,也有作用域的概念更安全一些
void fun()
{
#define A int
}
void gun()
{
//在这里也可以使用A,因为宏替换没有作用域,
//但如果上面用的是typedef,那这里就不能用A
}
zhangfjj
2005-04-28
打赏
举报
回复
#define是定义宏,是预处理命令,在编译之前进行宏展开。
typedef是定义已有类型的别名。
lumenshan
2005-04-28
打赏
举报
回复
1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如:
#define PI 3.1415926
程序中的:area=PI*r*r 会替换为3.1415926*r*r
如果你把#define语句中的数字9 写成字母g 预处理也照样带入。
2)typedef是在编译时处理的。它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef specifier inside a function definition。
3)typedef int * int_ptr;
与
#define int_ptr int *
作用都是用int_ptr代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型。也就是说;
//refer to (xzgyb(老达摩))
#define int_ptr int *
int_ptr a, b; //相当于int * a, b; 只是简单的宏替换
typedef int* int_ptr;
int_ptr a, b; //a, b 都为指向int的指针,typedef为int* 引入了一个新的助记符
这也说明了为什么下面观点成立
//QunKangLi(维护成本与程序员的创造力的平方成正比)
typedef int * pint ;
#define PINT int *
那么:
const pint p ;//p不可更改,但p指向的内容可更改
const PINT p ;//p可更改,但是p指向的内容不可更改。
pint是一种指针类型 const pint p 就是把指针给锁住了 p不可更改
而const PINT p 是const int * p 锁的是指针p所指的对象。
3)也许您已经注意到#define 不是语句 不要在行末加分号,否则 会连分号一块置换。
qrlvls
2005-04-28
打赏
举报
回复
#define 只是简单的字符串替换
typedef 是类型定义,有些是用 #define 无法替代的
例如
typedef void (*VoidFuncPtr)();
VoidFuncPtr pFunc;
KenYuan2016
2005-04-28
打赏
举报
回复
define定义宏,是预处理命令,在编译之前进行宏展开。
typedef是定义已有类型的别名。
跟一楼同解。
如 #define failure 0x00
typedef int a; 那么a 就是int 的别名
withc
2005-04-28
打赏
举报
回复
#define 是要编译处理的,并不是简单的替换。
const PINT P 等效预 int const * p;
PINT是个整体。const修饰的是 PINT,即整个 int *。
typedef 只是简单的替换。
sms88
2005-04-28
打赏
举报
回复
楼上的
const pint p ;
const PINT p ;
还原后,不都是const int * p 吗??
#
define
VS
typedef
#
define
是预处理指令
typedef
是在编译时处理的
typedef
与#
define
的
区别
typedef
与
define
的
区别
typedef
与
define
的用法,说明
typedef
和
define
的
区别
及各自的特殊用法
typedef
和
define
的
区别
简单介绍了这两者的
区别
,可以供初学者参考,以便更深入理解
typedef
和#
define
的用法与
区别
文章主要介绍了
typedef
和#
define
的用法与
区别
#
define
,const,
typedef
三者联系与
区别
文章简单介绍了#
define
,const,
typedef
三者联系与
区别
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章