typedef&define

typedef

(1)定义函数别名

typedef int (*myfun)(int, int);

使用方法:

myfun test_fun;
//相当于 int test_fun(int, int);
//可以用来声明函数,最常用是在结构体里

(2)给变量类型重新定义

typedef struct{
    int a;
    int b;
}MY_TYPE;

typedef 与 #define 的区别

(1)#define可以使用其他类型说明符对宏类型名进行扩展,但对 typedef 所定义的类型名却不能这样做。例如:

#define INTERGE int;
unsigned INTERGE n;  //没问题
typedef int INTERGE;
unsigned INTERGE n;  //错误,不能在 INTERGE 前面添加 unsigned

(2) 在连续定义几个变量的时候,typedef 能够保证定义的所有变量均为同一类型,而 #define 则无法保证。例如:

#define PTR_INT int *
PTR_INT p1, p2;        //p1、p2 类型不相同,宏展开后变为int *p1, p2;
typedef int * PTR_INT
PTR_INT p1, p2;        //p1、p2 类型相同,它们都是指向 int 类型的指针。

简而言之,#define 只是字面上的替换,由预处理器执行,#define A B 相当于打开编辑器的替换功能,把所有的 B 替换成 A。

与 #define 不同,typedef 具有以下三个特点:

  • 1.typedef 给出的符号名称仅限于对类型,而不是对值。
  • 2.typedef 的解释由编译器,而不是预处理器执行。并不是简单的文本替换。
  • 3.虽然范围有限,但是在其受限范围内 typedef 比 #define 灵活。
posted @   Jabari12  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示