c语言define和typedef区别和使用

  define完全可以理解替换,typedef代表别名。听着差不多的意思,那2者区别在哪?

  先来个简单例子查看基本使用。

//define和typedef区别
#define DB double  //替换  define 被替换的内容 替换的内容
typedef double db; //别名  typedef 原来的类型名 新的别名
//typedef需要分号 ,typeof 去掉以后符合语法规则,define去掉就会报错

void main()
{
     //看不出区别
     DB d1 = 1.2,d2=1.8; //等价 double d1 = 1.2,d2=1.8;
     db d3 = 1.9,d4=2.3; //等价  double d3 = 1.9,d4=2.3;

     printf("%f,%f",d1,d2);
     printf("\n%f,%f",d3,d4);

}

  上面唯一看出的区别就是typedef需要分号。

  通过指针变量来测试2者的区别

#define DP double *
typedef double * dp;

void main2()
{
    DP dp1,dp2; //DP是替换,等价 double *dp1,dp2; //dp1是指针占4个字节,dp2就是double类型数据8字节
    dp dp3,dp4; //都是4字节的指针, 等价于 dobule *dp3,*dp4;

    printf("%d,%d", sizeof(dp1),sizeof(dp2));  //4,8
    printf("\n%d,%d",sizeof(dp1),sizeof(dp2)); //4,4
}

  通过上面例子可以看出define完全就是替换,typedef则不同。

  最后简单说明下,利用利用define和typedef构建函数指针 

 1 void print(int num)
 2 {
 3     printf("时间%d",num);
 4 }
 5
 6 void main()
 7 {
 8     //函数指针
 9     void(*p)(int num) = print;
10     p(10);
11 }

  但是像上面第9行代码那样写多了会觉得很烦啊,可以使用define和typedef来构建

 1 //typedef int* pint; //给int类型指针别名
 2 typedef void(*p)(int num); //给函数指针类型别名 ,p是类型的别名
 3 #define Pprint(X) void(*X)(int num) //带参数的宏模式
 4
 5 void main()
 6 {
 7     //函数指针
 8
 9     //利用typedef
10     p p1 = print;
11     p1(10);
12
13     //利用define
14     Pprint(p2) = print;
15     p2(33);
16 }
时间: 2024-08-10 19:17:59

c语言define和typedef区别和使用的相关文章

程序猿之---C语言细节21(#define和typedef区别、结构体细节)

主要内容:#define和typedef区别.结构体细节 #include <stdio.h> #define INT_D int* #define CHAR_D char int main() { /*#define 与 typedef区别*/ typedef int* INT_T; typedef char CHAR_T; INT_T a,b; // a.b都为int型指针 INT_D c,d; // c为int型指针.d为int整型 unsigned CHAR_D e; // #defi

define和typedef区别

一.起作用的时间不同 typedef在编译阶段起作用,因此有类型检查的功能. define在预处理阶段起作用(编译之前),只进行简单的字符串替换而不进行类型检查. 二.功能不同 typedef (1)用来定义类型的别名 (2)定义机器无关的类型 (例如定义一个叫 REAL 的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL; 那么在不支持 long double 的机器上,该 typedef 看起来会是下面这样:typedef double REAL;

define与typedef 区别

1)     #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错.例如:#define PI 3.1415926程序中的:area=PI*r*r 会替换为3.1415926*r*r如果你把#define语句中的数字9 写成字母g 预处理也照样带入. 2)typedef是在编译时处理的.它在自己的作用域内给一个已经存在的类型一个别名,但是You cannot use the typedef spe

#define 和typedef的区别

typedef和define的详细区别 2011-04-19 15:11 firnow firnow 字号:T | T 对于都可以用来给对象取一个别名的Typedef和define来说,是有区别的.本文通过对typedef和define的介绍,来给读者详细的讲解它们存在的本质区别,供参考. AD:51CTO学院:IT精品课程在线看! typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字. #define是预处理指令.下面让我们一起

#define和typedef的简单区别及使用

/* ============================================================================ Name : TestDefine.c Author : lf Version : Copyright : Your copyright notice Description : #define和typedef的简单区别及使用 1 两者执行时间的差异 #define是宏定义,发生在预处理阶段,即编译之前. 它只进行简单而机械的替换,而不进

define与typedef

#define与typedef有相似之处,但二者有本质区别 1 #define INTEGER int 和 typedef int INTEGER; 程序中INTEGER都可当做int使用,前者是预处理的宏代换,将程序中所有INTEGER先替换为int再进行编译,并没有产生新的名字:而后者是为int取了一个新的别名. 1 typerdef struct 2 { 3 int num; 4 char count; 5 }STUDENT;//STUDENT 是类型别名,注意它与直接定义结构体变量的区别

iOS const和#define常量的区别

(1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具体的类型,在编译阶段会执行类型检查. (3) 存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存. const常量会在内存中分配(可以是堆中也可以是栈中). (4)const  可以节省空间,避免不必要的内存分配. 例如:          #define PI 3

c语言exit和return区别,在fork和vfork中使用

c语言exit和return区别,在fork和vfork中使用 exit函数在头文件stdlib.h中. exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在main主函数中,则会退出函数并返回一值,可以写为return(0),或return 0. 1. return返回函数值,是关键字:exit是一个函数. 2. return是语言级别的,它表示了调用堆栈的返回:而exit是系统调用级别的,它表示了一个进程的结束. 3. retu

C语言笔记之typedef

typedef 这个关键字用于给一个类型起个新的名字,和define不同, typedef 给出的符号名称仅限于对类型 , 而不是对值.下面是一个例子: typedef short wchar; typedef将short类型定义成wchar类型,那么以后遇到 wchar a; 其实就是 short a;  如果没有typedef这个关键字,wchar就是一个变量名,加上typedef,wchar就成了类型名.类型名也遵循标识符的命名规则,并且通常加个 _t 后缀,表示Type. 这样做有什么用