C语言使用typedef进行类型重定义

今天学习STM32开发时与遇到了一个类型重定义语句,查阅资料后把它的用法整理如下,不到之处敬请留言批评指定,看到就修改,来自开源,回馈开源,共同进步!

类型重定义基本介绍:

  在 C 语言中,除系统定义的标准类型和用户自定义的结构体、共用体等类型之外,还可以使用类型说明语句typedef 定义新的类型来代替已有的类型。

typedef 语句的一般形式是:

1 typedef 已定义的类型 新的类型; 

例如:

1 typedef int INTEGER; /*指定用 INTEGER 代表 int 类型*/
2 typedef float REAL; /*指定用 REAL 代表 float 类型*/

在上述添加了 typedef 语句的程序中,下列语句同上述语句就是等价的:

1 int i, j; /*与 INTEGER i, j;*/
2 float pi; /*与 REAL pi;*/

实际上,typedef的最常用的作用就是给结构体变量重命名:

 1 #include<stdio.h>
 2 #include<string.h>
 3 typedef struct _INFO
 4 {
 5         int num;
 6         char str[256];
 7 }INFO;
 8 int main()
 9 {
10         struct _INFO A;
11         INFO B;    //通过typedef重命名后的名字INFO与struct _INFO完全等价!
12         A.num = 2019;
13         strcpy(A.str,"Welcome to wind-under-the-wing");
14         B=A;
15         printf("This year is %d %s\n",A.num,A.str);
16         printf("This year is %d %s\n",B.num,B.str);
17         return 0;
18 }

原文地址:https://www.cnblogs.com/wind-under-the-wing/p/11757382.html

时间: 2024-10-11 14:55:18

C语言使用typedef进行类型重定义的相关文章

cocos2dx -- 错误笔记(3)class类型重定义

发生这个错误之后,百度之 发现原因是因为: “class”类型重定义  : 一般都是头文件重复include引起的. 比较之后发现: .h 文件中 缺少了   #pragma once 加入之后问题解决!

sockaddr struct 类型重定义

windows.h和winsock2.h有类型重定义我是知道的,本来就一个库来说没问题,把winsock2放到windows.h前或先定义WIN32_LEAN_AND_MEAN都能解决问题但现的出了问题,自己写的一个库里要用到ws2tcpip,这个头文件第一个包含的头文件就是winsock2.h把它放到windows前,库是能成功编译了,但当我在一个wxWidgets中调用它时,又出现那个让人厌烦的错误 ““sockaddr”: “struct”类型重定义”明显是wxWidgets先包含了win

[转]C++ error C2011: “XXX”:“class”类型重定义

http://blog.csdn.net/m_leonwang/article/details/27678219 尝试修复这个程序的错误: 点击下载源代码文件夹

typedef 类型重命名 和 #define 宏定义(1)

http://www.blogjava.net/jasmine214--love/archive/2010/11/29/339307.html 在现实生活中,信息的概念可能是长度,数量和面积等.在C语言中,信息被抽象为int.float和double等基本数据类型.从基本数据类型名称上, 不能够看出其所代表的物理属性,并且int.float和double为系统关键字,不可以修改.为了解决用户自定义数据类型名称的需求,C语言中引入类 型重定义语句typedef,可以为数据类型定义新的类型名称,从而

语言中结构体变量和结构体类型的定义

1.结构体类型定义 定义方式1: Typedef struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 } *LinkList; 定义方式2: struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 }: Typedef struct  LNode  *LinkList; 以上两个定义方式是等价的,是将*LinkList定义

传智播客视频学习 ----&gt;&gt;&gt;&gt; typedef 重定义 数据类型

1. typedef 重定义 数组类型 1 typedef int (MyArray)[5]; // 定义了一个数据类型 数组数据类型 2 MyArray myArray; // 相当于 int myArray[5]; 3 4 // 初始化数组内容 5 for ( int i = 0; i < 5; i ++){ 6 myArray[i] = i + 1; 7 } 8 9 // 打印数组内容 10 for ( int i = 0; i < 5; i ++){ 11 printf("m

ssize_t 重定义 不同的基类型

场景 Thrift编译库和RabbitMQ编译库引用的时候,发生编译错误: "ssize_t": 重定义:不同的基类型 Thrift定义在config.h : typedef long ssize_t; RabbitMQ定义在amqp.h : #ifdef _MSC_VER #ifdef _WIN64 typedef __int64 ssize_t; #else typedef _W64 int ssize_t; #endif #endif 解决方案 将Thrift中所有引用ssize

typedef与define宏定义用于声明新的类型之间的区别

摘自<c专家编程> typedef可以看成一种彻底的封装类型,在typedef声明类型之后不能再往里面增加其他的内容. 例子: #define peach int unsigned peach i; //没问题 typedef int banana; unsigned banana i; //错误,不能增加unsigned #define宏定义只是用于简单的替换 #define int_ptr int * int_ptr chalk, cheese; int * chalk, cheese;

C++基础6 【继承】 类型兼容 satatic 多继承 虚继承 【多态】 案例 虚析构函数 重载重写重定义

[继承] 继承的访问控制域 图 类型兼容性原则  指针 与 引用 用子类直接初始化父类 类的继承模型示意 图 [继承结论] [非常重要的概念] 继承与组合混搭情况下,构造和析构调用原则 原则:先构造父类,再构造成员变量.最后构造自己 先析构自己,在析构成员变量.最后析构父类 继承中,同名的成员变量的处理办法 继承中,同名的成员函数的处理办法 派生类中的static关键字 如果静态成员变量,你没有使用,也没有初始化的话 编译不会报错 经典错误 : 类中函数默认是private的,无法在外部访问 具