我是靠谱客的博主 复杂睫毛,这篇文章主要介绍C++ typedef 和define的区别1 typedef 的用法2 define 的用法3 typedef 和 define 的区别参考资料,现在分享给大家,希望可以做个参考。

在这里插入图片描述

文章目录

  • 1 typedef 的用法
    • (1) 基本类型
    • (2) 结构体的使用
    • **3) 混合使用**
  • 2 define 的用法
  • 3 typedef 和 define 的区别
  • 参考资料

注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/101542039


1 typedef 的用法

在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间。
typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。

typedef的用途: 为已有的数据类型重新命名。

(1) 基本类型

int a=10;
//为整型重新命名
typedef int ZS;
ZS b=10;

(2) 结构体的使用

1) 为结构体重新命名

//ST---->等价于struct Student
typedef struct Student
{
   int id;
   char sex;
}ST;

2) 为结构体重新命名(指针类型)

//PST---->等价于struct Student*
typedef struct Student
{
   int id;
   char sex;
}* PST;

3) 混合使用

//PST等价于struct Student*
//ST等价于struct Student
typedef struct Student
{
   int id;
   char sex;
}* PST,ST;



2 define 的用法

#define为一宏定义语句,通常用它来定义常量(包括无参量与带参量),以及用来实现那些“表面似和善、背后一长串”的宏,它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了,但也因此难以发现潜在的错误及其它代码维护问题。例如:

#define   INT    int;

#define   TRUE    1;

#define   Add(a,b)   ((a)+(b));

#define   Loop_10    for (int i=0; i<10; i++) {}



3 typedef 和 define 的区别

typedef只是为了增加可读性而为标识符另起的新名称(仅仅只是个别名),而#define原本在C中是为了定义常量,到了C++,const、enum、inline的出现使它也渐渐成为了起别名的工具。有时很容易搞不清楚与typedef两者到底该用哪个好,如#define INT int这样的语句,用typedef一样可以完成。那么问题来了,用哪个好呢?
一般主张用typedef,因为在早期的许多C编译器中这条语句是非法的,只是现今的编译器又做了扩充。为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。
define宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。


typedef 和define的区别总结如下:

(1) 两者的执行时间不同
#define是在编译前,也就是在预处理阶段进行,不会进行检查;
而typedef是在编译阶段进行,具有类型检查。

(2) 作用域不同
#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。
typedef有自己的作用域。


(3) 对指针的操作不同

#define PCTR char*
typedef char* PTR;
……
const PCTR p;   //p可以更改,p指向的内容不能更改,相当于const char *p;或 char const *p。
const PTR p;    //p不可更改,p指向的内容可以更改,相当于char *const p;
PTR a,b;        //相当于char *a;char *b;a和b都是char型的指针
PCTR a,b;       //相当于char *a;char b;只有a是char型的指针,而b是char型的变量。

再举个例子
例如:

typedef    (int*)      pINT ;

#define    pINT2    int* ;

上面两种看似效果相同,实则不同!具体区别如下:
pINT a,b; 的效果同int *a; int *b;表示定义了两个整型指针变量。
而pINT2 a, b;的效果同int *a, b; 表示定义了一个整型指针变量a和整型变量b。


(4) 功能不同

#define 虽然只是简单的替换,但是也可为为类型取别名,还可以定义常量、变量和编译开关等;
typedef用来定义类型的别名,可以定义与平台无关的数据类型,可与struct结合使用。




参考资料

[1] https://blog.csdn.net/baweiyaoji/article/details/53141088
[2] https://blog.csdn.net/boiled_water123/article/details/100184251
[3] https://blog.csdn.net/qq_42214953/article/details/101460797

最后

以上就是复杂睫毛最近收集整理的关于C++ typedef 和define的区别1 typedef 的用法2 define 的用法3 typedef 和 define 的区别参考资料的全部内容,更多相关C++内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(105)

评论列表共有 0 条评论

立即
投稿
返回
顶部