c语言中的 typedef 可以定义新的类型.非常方便

额, 这个知识, 还是chatgpt告诉我的. c语言的教程中并没有相关说明.
首先来看看结构体定义

struct Point {
    
    
	int x;
	int y;
	int nfcCardCode;
	bool isObstacle;
} pointA;

这段C语言代码中, 定义了一个 Point 类型的结构体, 并同时初始化了一个Point类型的变量. 叫做pointA

同时我们还可以继续定义其它变量

struct Point  pointB;
struct Point  pointC;
struct Point  pointD;
struct Point  pointE;

注意这里的前面必须带个 struct 关键字, 否则编译器会提示你 不知道Point是啥. 默认当做宏来处理.
这样的定义必然导致,任何一个用到结构体的地方都需要 前面加个 struct
那么有没有什么语法可以解决这个恶心的问题?

方法是有的, 就是今天的主角. typedef

typedef struct {
    
    
	int x;
	int y;
	int nfcCardCode;
	bool isObstacle;
} Point;struct Point {
    
    
	int x;
	int y;
	int nfcCardCode;
	bool isObstacle;
} Point;

的区别是什么?

这两个定义的区别在于第一个是使用了 typedef 关键字来定义了一个新的类型名 Point,而第二个是直接定义了一个结构体类型 Point。

使用 typedef 关键字可以为已有的类型定义一个新的名字,这样可以方便地使用该类型,而不必每次都写出完整的类型名。在这个例子中,typedef 关键字将 struct Point 定义为了一个新的类型 Point,这样在代码中就可以直接使用 Point 来代替 struct Point。

而第二个定义直接定义了一个结构体类型 Point,在使用该类型时需要使用 struct Point 来表示该类型。

typedef 是那个版本引入的C语言语法?

typedef 是 C 语言早期就有的语法,它的作用是为已有的类型定义一个新的名字。在 C 语言中,typedef 关键字可以用来定义新的类型名,这样可以方便地使用该类型,而不必每次都写出完整的类型名。

typedef 关键字的使用方式如下:

typedef <已有类型> <新类型名>;

其中,已有类型 可以是任何已有的类型,包括基本类型、结构体、联合体、枚举等,而 新类型名 则是为该类型定义的新的名字。

typedef 关键字的使用非常灵活,可以用来定义各种类型别名,例如:

typedef int Integer;
typedef float Real;
typedef struct Point Point;

这些语句分别定义了 Integer、Real 和 Point 三个新的类型名,它们分别代表了 int、float 和 struct Point 这三种已有的类型。

语法

typedef struct {
    
    
	int x;
	int y;
	int nfcCardCode;
	bool isObstacle;
} Point;

可以写成

typedef struct Point{
    
    
	int x;
	int y;
	int nfcCardCode;
	bool isObstacle;
} ;?

不可以。在使用 typedef 定义新类型名时,必须指定已有类型和新类型名,而不能省略其中的任何一个。因此,正确的写法应该是:

typedef struct Point {
    
    
    int x;
    int y;
    int nfcCardCode;
    bool isObstacle;
} Point;
或者
// 这里名称不写就是匿名类型名
typedef struct {
    
    
    int x;
    int y;
    int nfcCardCode;
    bool isObstacle;
} Point;

其中,struct Point 是已有的类型,Point 是为该类型定义的新的类型名。 在这个例子中,我们使用了 typedef 关键字将 struct Point 定义为了一个新的类型 Point,这样在代码中就可以直接使用 Point 来代替 struct Point。
以后定义结构体变量就可以直接这样写啦.

 Point  pointB;
 Point  pointC;
 Point  pointD;
 Point  pointE;

我靠. 写了10几年的代码竟然不知道C语言还有这样的语法. 教程里好像也没有写这种语法. 还不如人工智能几天的知识量.

要被淘汰了.

猜你喜欢

转载自blog.csdn.net/phker/article/details/131188429