typedef和define有什么区别

2023-05-16

typedef和define都是替一个对象取一个别名,以此增强程序的可读性,区别如下:

(1)原理不同

#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。

typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,增强可读性。

(2)功能不同

typedef用来定义类型的别名,起到类型易于记忆的功能。另一个功能是定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL, 在不支持long double的机器上,看起来是这样的,typedef double REAL,在不支持double的机器上,是这样的,typedef float REAL

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

(3)作用域不同

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

(4)对指针的操作不同

#define INTPTR1 int*

typedef int* INTPTR2;

INTPTR1 p1, p2;

INTPTR2 p3, p4;

含义分别为,

声明一个指针变量p1和一个整型变量p2

声明两个指针变量p3、p4

#define INTPTR1 int*

typedef int* INTPTR2;

int a = 1;

int b = 2;

int c = 3;

const INTPTR1 p1 = &a;

const INTPTR2 p2 = &b;

INTPTR2 const p3 = &c;

上述代码中,

const INTPTR1 p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向其他内容。

const INTPTR2 p2是一个指针常量,不可使p2再指向其他内容。因为INTPTR2表示一个指针类型,因此用const限定,表示封锁了这个指针类型。

INTPTR2 const p3是一个指针常量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

typedef和define有什么区别 的相关文章

随机推荐

  • ROS入门与实践--3(工作空间和功能包的创建及HelloWorld简单实现)

    ROS入门与实践 3 1 工作空间和功能包1 1 工作空间定义1 2 工作空间的创建1 3 功能包的创建 2 通过指令及编辑器实现HelloWorld2 1 HelloWorld实现 C 43 43 版本 2 1 1 功能包下新建并编辑cp
  • 两种随机数生成方法——反函数法和舍选法

    两种随机数生成方法 反函数法和舍选法 我们知道 xff0c 对于均匀分布的随机数 xff0c 我们可以使用随机数生成器类似的方法生成均匀分布的随机数 包括线性同余发生器 xff0c FSR发生器等 对于非均匀分布的随机数 xff0c 对于连
  • 奥比中光Orbbec Astra Pro RGBD 3D视觉传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示

    Orbbec Astra Pro传感器在ROS xff08 indigo和kinetic xff09 使用说明 rgb depth同时显示 这款摄像头使用uvc输入彩色信息 xff0c 需要libuvc和libuvc ros这样才能在ROS
  • 【BUG解决】sudo apt-get update 报错 E: The repository ‘http://xxx Release‘ does not have a Release file.

    BUG描述 前两天在虚拟机Vmware中安装了Ubuntu18 04操作系统 xff0c 因为需要安装其他工具 所以想着执行命令 sudo apt get update 更新一下系统 xff0c 以便进行安装 结果出现 E The repo
  • python isinstance(), stack,判断list, dict, tuple为空

    Problem Nikola likes to categorize everything in sight One time Stephan gave him a label maker for his birthday and the
  • 路径跟踪算法之PID路径跟踪与PP跟踪

    路径跟踪算法之PID路径跟踪与PP跟踪 1路径跟踪原理2 常见的路径跟踪算法2 1 Pure puresuit pp 纯跟踪2 2 PID 跟踪 1路径跟踪原理 在运用好的路径规划算法 xff0c 规划好一条从起点到目标点最优的路径后 xf
  • 深入详解PID三项的作用与特性(抛开公式,以常识认识PID)

    深入探讨PID三项作用与特性 xff08 纯以常识方式对PID进行数学理论分析 xff09 1 经典PID的理解 xff08 抛弃公式 xff0c 以常识认识PID xff09 源文献 PID指的就是比例 积分 微分三项的结合 xff0c
  • ADRC自抗扰控制,有手就行

    ADRC自抗扰控制 xff0c 有手就行 关于ADRC的优点本人不会赘述 xff0c 毕竟作为一个ADRC算法都推导不出来的应用工程师 xff0c 最希望看到的就是有手就行的操作方法 ARC的缺点就显而易见 xff0c 就是参数多 xff0
  • nuScenes数据集详细介绍

    本文为博主原创文章 xff0c 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 xff0c 地址为 https blog csdn net suiyingy article details 12401771
  • fegin调用的时候数据格式转换为linkedhashmap

    在spring cloud项目开发中 xff0c 使用fegin进行远程调用 1 接口服务方返回类型为Map String Object 类型 2 接口调用方返回值类型也是Map String Object 3 通过fegin调用之后返回的
  • 一个字符串截取函数c语言

    刚开始学习c语言 xff0c 标准库中总是有很多函数没有 xff0c string h中的字符串处理函数好像不是很多 xff0c 在做栈的例子用需要用到一个字符串按位置截取的函数 xff0c 就自己写一个 xff0c 超简单 char su
  • RAF_DB数据集分类_3

    混淆矩阵 这里ECANet太长了 xff0c 我这里直接利用resnet代替一下 xff0c 你可以直接替换 xff0c 然后把权重对应好即可 xff0c 这只是一个简单的混淆矩阵生成 xff0c 没有太多美化 span class tok
  • docker镜像的创建

    目录 基于现有镜像创建 首先启动一个镜像 xff0c 在容器里做修改 然后将修改后的容器提交为新的镜像 xff0c 需要使用该容器的ID号创建新镜像 基于本地模板创建 导入镜像 基于Dockerfile创建 联合文件系统 xff08 Uni
  • ROS源码分析--子话题-catkin

    catkin简介 catkin简介 packagexml 格式1格式2 CMakeListtxtmeta package典型ROS应用添加自定义message文件 修改packagexml修改CMakeListtxt find packag
  • vnc安装和开机自启设置

    一 安装VNC 键入以下命令以在 Ubuntu 服务器上安装 TigerVNC xff1a sudo apt install tigervnc standalone server tigervnc common 现在安装了 VNC 服务器
  • 【Linux】线程安全篇Ⅰ

    文章目录 0 概述1 线程不安全举例1 1 前提知识铺垫1 2 场景模拟1 3 代码模拟 2 互斥2 1 什么是互斥2 2 互斥锁的原理 amp amp 特性2 3 互斥锁的计数器如何保证原子性2 4 互斥锁的接口2 4 1 初始化接口2
  • PX4/APM/飞控的学习笔记前言-Cxm

    开始了 开始了 终于有时间可以学习飞控了 此文章是用来当目录 我会持续更新我的学习之旅 希望能对各位有所帮助 如果有错误的地方还请各位前辈指点 此帖持续更新后续内容 其实从21年的一月就开始学习飞控一开始是从PX4开始学习 但是因为对liu
  • kubernetes 中文版

    这个文档非常好用 xff0c 建议收藏 无水印版 https pan baidu com s 1LSI46GBENd90Z06FnuaKmw lukb
  • SimpleBGC三轴云台用户手册

    SimpleBGC三轴云台用户手册 V1 00 硬件平台 xff1a STorM BGC V1 31 软件框架 xff1a SimpleBGC V1 00 本方案是采用俄版STorM BGC硬件平台 xff0c 软件采用SimpleBGC架
  • typedef和define有什么区别

    typedef和define都是替一个对象取一个别名 xff0c 以此增强程序的可读性 xff0c 区别如下 xff1a xff08 1 xff09 原理不同 define是C语言中定义的语法 xff0c 是预处理指令 xff0c 在预处理