社区
C语言
帖子详情
#define和typedef的区别
sms88
2005-04-28 08:28:30
#define和typedef都是进行替名?
...全文
1558
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
和
typedef
的使用
介绍#
define
和
typedef
的
区别
于使用
172集通俗易懂的C语言从入门到项目实战教程
组指针、函数指针、回调函数)、调试技巧、程序环境和预处理(翻译环境、运行环境、预定义符号、#
define
和#undef、宏和函 数、条件编译、文件包含)、 数据在内存中的存储、内存块分配、static、字符函数和字符串函数、...
#
define
VS
typedef
#
define
是预处理指令
typedef
是在编译时处理的
typedef
与#
define
的
区别
C语言中#
define
与
typedef
的互换细节详解
本篇文章是对C语言中#
define
与
typedef
的互换细节进行了详细的分析介绍,需要的朋友参考下
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章