C语言typedef详解

在C还是C++代码中,typedef都使用的很多。typedef与#define有些相似,其实是不同的。

基本定义:typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括基本数据类型(int,char),也包括自定义的数据类型(struct)。

(1)与#define的区别

typedef有点像#define宏,其实际类型替代同义字。不同点是typedef在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。

(2)减少错误

定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:

char* pa,pb;

这多数不符合我们的意图,它只声明一个指向字符变量的指针和一个字符变量。可以使用下面方式修改:

typedef char* pchar;
pchar pa,pb;

这种方式很有用,特别是char* pa,pb;的定义,初学者往往认为是定义了两个字符型指针,其实不是,而用typedef char* pchar 就不会出现这个问题,减少了错误的发生。

(3)直观简洁

用在旧的C代码中,配合struct使用。以前的代码中,声明struct新对象时,必须要带上struct,即形式为:struct 结构体名 对象名。如:

struct tagPOINT1 {
    int x;
    int y;
};
struct tagPOINT1 p1;

如果使用typedef代码如下:

typedef struct tagPOINT {
    int x;
    int y;
}POINT;
POINT p1;//可以这样;
struct tagPOINT p2;//也可以这样;

或:

typedef struct {
    int x;
    int y;
}POINT;
POINT p1;

POINT p1;这样就比原来的方式少写了一个struct,比较省事,尤其在大量使用的时候。

(4)平台无关性

用typedef来定义与平台无关的类型。比如可以定义一个REAL的浮点类型,在目标机器上可以获得最高的精度。

typedef long double REAL;

在不支持long double的机器上,可以修改为如下:

typedef double REAL;

如果连double都不支持,修改为如下:

typedef float REAL;

也就是说,当跨平台时,只要改下typedef本身就行,不用对其他源码做任何修改。

本文参考:http://blog.csdn.net/wangqiulin123456/article/details/8284939   。

时间: 2024-08-03 19:48:43

C语言typedef详解的相关文章

彻底搞定C语言指针详解

1.语言中变量的实质 要理解C指针,我认为一定要理解C中“变量”的存储实质, 所以我就从“变量”这个东西开始讲起吧! 先来理解理解内存空间吧!请看下图: 内存地址→ 6 7 8 9 10 11 12 13 ----------------------------------------------------------------- ... | | | | | | | |.. ------------------------------- ---------------------------

11_Shell语言———管道详解

管道的基本用法为: COMMAND1 | COMMAND2 | COMMAND3 | ... COMMAND1 的输出结果会作为输入参数传递给COMMAND2, COMMAND2加以处理后会传递给COMMAND3, 依此类推.管道的使用便是Linux哲学思想中"组合小程序完成复杂任务"的体现方式. 如果管道的最后一个命令是在当前shell的子shell中执行,那么该执行结果不能保存为一个变量,这样会导致当前shell无法获取执行结果,这是由shell中"本地变量只对当前she

C语言之typedef详解

typedef可以看作type define的缩写,顾名思义就是类型定义,也就是说它只是给已有的类型重新定义了一个方便使用的别名,并没有产生新的数据类型. typedef的使用与宏定义define有些许的相似,但两者又有以下不同: 1.与#define不同,typedef给出的符号名称仅限于对类型,而不是对值. 2.typedef的解释由编译器,而不是预处理器执行. 3.typedef比#define更灵活. 既然typedef没有定义新的数据类型,那么为什么还要使用它呢?使用typedef有其

C语言正则表达式详解 regcomp() regexec() regfree()详解

标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库,许多Linux发行版本都带有这个函数库. C语言处理正则表达式常用的函数有regcomp().regexec().regfree()和regerror(),一般分为三个步骤,如下所示: C语言中使用正则表达式一般分为三步: 编译正则表达式 regcomp() 匹配正则表达式 regexec() 释

C语言关键字详解

相对于其他语言来说,C语言的关键字算是少的了.在C98中关键子总共只有32个,我们来分析一下每个关键字在C语言中它独特的作用. 1.关于数据类型的关键字 (1) char :声明字符型变量或函数  (2) double :声明双精度变量或函数  (3) enum :声明枚举类型 enum类型可以增加可读性,可移植性:在enum中定义的每个对象,默认都是从0开始,当然也可以自定义.如下: enum Color{RED,BLACK,WHITE}; enum Number{ONE=1,TWO,THRE

C语言文件详解

1.C语言FILE类,在stdio.h头文件中,FILE类是一个结构体:定义如下: 通过typedef定义了 文件类型 的别名: “FILE”,这样以后需要读写文件的时候直接定义FILE就行了. 虽然看不懂参数具体表示的是什么,但是凭借这我们使用电脑的经验不难知道,FILE的属性无非就是文件名,修改时间,权限等一些信息 比如我们查看linux的文件的属性: 对这个属性解释如下: (1) -rwxr-xr-x 表示用户读取该文件的权限. (2) 1 表示该文件的连接数,即有几个文件指向这个文件,这

c/c++中typedef详解

1. typedef 最简单使用 1 typedef long byte_4; // 给已知数据类型long起个新名字,叫byte_4 你可以在任何需要 long 的上下文中使用 byte_4.注意 typedef 并不创建新的类型.它仅仅为现有类型添加一个同义字. 2. typedef 修饰数组 1 typedef char mySizes[100]; 2 mySizes xxx; 3 4 typedef char [100] mySizes; //error   这里 mySize 就是一个

小程序脚本语言WXS详解

WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就是通过文件类型:JS.JSON.WXML.WXSS.WXS.前面四种之前已经介绍过,今天主要是介绍WXS这种文件类型.如果你是PHP.JAVA.C#程序员的话写过服务端代码的话,就很好理解WXS这种脚本语言了.能够更加方便的动态实现页面上的一些基本逻辑判断,而不用全部的依赖后台实现,再通过接口返回.

c语言scanf详解

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式.其调用格式为:      scanf("<格式化字符串>",<地址表>);scanf()函数返回成功赋值的数据项数,出错时则返回EOF.其控制串由三类字符构成:1.格式化说明符: 2.