首页 > 其他分享 >14.宏定义和typedef区别?

14.宏定义和typedef区别?

时间:2023-07-03 21:22:14浏览次数:33  
标签:typedef 14 定义 别名 char 类型 define

  • 宏主要用于定义常量及书写复杂的内容;typedef主要用于定义类型别名。
  • 宏替换发生在编译阶段之前,属于文本插入替换;typedef是编译的一部分。
  • 宏不检查类型;typedef会检查数据类型。
  • 宏不是语句,不在在最后加分号;typedef是语句,要加分号标识结束。
  • 注意对指针的操作,typedef char * p_char和#define p_char char *区别巨大。
typedef char * p_char; 和 #define p_char char *都是用来定义一个指针类型的别名。
但是它们之间有以下几点区别:
  1. 语法不同:typedef用于定义一个新的类型别名,而 `#define` 用于定义宏。
  2. 可读性不同:typedef可以提高代码的可读性,因为它使用更加清晰明确的名称来代替原来的类型。而#define则可能会使代码变得难以理解,因为宏是文本替换,可能会产生不必要的复杂性。
  3. 作用域不同:typedef定义的类型别名具有局部作用域,只在定义它的代码块中有效。而#define定义的宏则具有全局作用域,可以在程序的任何地方使用。
  4. 可移植性不同:typedef具有更好的可移植性,因为它不依赖于特定的编译器或操作系统。而#define可能会导致不同的行为,因为不同的编译器或操作系统可能对宏的处理方式有所不同。

因此,建议在C++中使用typedef` 来定义类型别名,而不是使用 `#define`。

标签:typedef,14,定义,别名,char,类型,define
From: https://www.cnblogs.com/codemagiciant/p/17524095.html

相关文章

  • nginx 错误页 指向 自定义页面
    1、安装简易版nginx可参考:https://www.cnblogs.com/fanyann/p/17500960.html以下所有操作均给予上面安装链接的系统版本和软件版本。2、首先,创建你自己的HTML错误页面,例如error.html。3、找到你的nginx.conf,它可能在/usr/local/nginx/conf,/etc/nginx,/usr/local/etc/nginx......
  • C++ 宏定义
    看到一段C++代码,大致是说如果如果定义了RUN_ALL_TESTS就执行下面的代码,遂研究了一下。#ifdefined(RUN_ALL_TESTS)//somecodehere#endif首先RUN_ALL_TESTS是定义的宏:#defineRUN_ALL_TESTS//空字符串#defineRUN_ALL_TESTS1//赋值为1#ifdefined......
  • 微信小程序uniapp解决真机顶部自定义菜单显示(手机状态栏覆盖)
    1.在data里面加入参数statusBarHeight:uni.getSystemInfoSync().statusBarHeight,//状态栏高度2.对返回按钮处理<!--空出状态栏高度--><view:style="'height:'+statusBarHeight+'px;'"></view><!--返回按钮--><di......
  • react之自定义hooks
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址任何相对独立、复用性强的逻辑,都可以extract为自定义Hook,自定义Hook是一种复用React的状态逻辑的函数。自定义Hook的主要特点是:抽象组件间的状态逻辑,方便复用让功能组件更纯粹,更易于维护自定义Hook可......
  • 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in
    项目场景:mysql创建function报错误1418-ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAin问题描述:执行创建函数的sql语句时,提示:ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAinitsdeclarationandbinaryloggingisenab......
  • 新1期视频第14课und异常中断模式的bug以及对应的解决方法
    正在学习新1期第14课und异常模式程序示例的同学,可能会发现014_und_exception_014_004\001的代码存在如下BUG,学员在论坛反馈后,我们已经第一时间解决,下面将以对话的形式完整的呈现这个解决方案。**学员azoxi:**对ARM裸机加强版-第14课und异常模式有打印异常疑惑,以下是我的start.S代......
  • C代码中如何使用链接脚本中定义的变量?
    交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)交流群二:QQ群:536785813(单片机-嵌入式)公 众 号:百问科技版本日期作者说明V12020韦东山技术文档在链接脚本中,经常有这样的代码:SECTIONS{......=ALIGN(4);.rodata:{*(.rodata)}.=ALIGN(4);.data:{*(.d......
  • 7月摸鱼计划全新升级啦!任选7/14/21天发博文吧~
    下半年,我们的摸鱼计划系列活动,全新升级啦~不需要留言报名!不需要等待统一领奖时间!7月摸鱼计划,将以【博主任务】形式,让大家自发选择更文任务!任务达标后即刻兑奖!且任务间的奖品可同享!【活动时间】发文时间:2023年7月1日—2023年7月31日【活动任务】以下任务福利可同享!!任务一:7天更文任务......
  • day14
    day14模块课程目标:掌握Python中常用模块的使用方法。今日概要:自定义模块(包)第三方模块内置模块【1/2】1.自定义模块1.1模块和包importhashlibdefencrypt(data):"""数据加密"""hash_object=hashlib.md5()hash_object.update(data.encode('utf......
  • 【leetcode】【1474】【删除链表 M 个节点之后的 N 个节点】
    c++第一个方法#include<algorithm>#include<iostream>#include<memory>#include<vector>//Definitionforsingly-linkedlist.structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}Li......