宏函数-----do while(0)的妙用

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解 摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重 阅读详情

下面2个宏函数

A:

    #define ASSERT(val) {if(!val) return -1;}

B:

    #define ASSERT(val) do{if(!val) return -1;}while(0)

 

两者有何区别,难道do while在此简直是多此一举?

其实不是的,看下面的应用

 

   if(cond)

       ASSERT(val);

   else

        func();

 

A展开的结果是:

    if(cond)

     {

 

     };

    else

      func();

------- 很明显,编译无法通过,else没有对应的 If 语句!

用B展开就没有这个问题!

 

因此建议用do while来代替域名符{ }防止非单行宏语句展开出错!

 

手把手教你双目测距理论及生成视差图,深度图,点云图像 Stereo Vision, 也叫双目立体视觉,它的研究可以帮助我们更好的理解人类的双眼是如何进行深度感知的。双目视觉在许多领域得到了应用,例如城市三维重建、3D模型构建(如kinect fusion)、视角合成、3D跟踪、机器人导航(自动驾驶)、人类运动捕捉(Microsoft Kinect)等等。双目测距也属于双目立体视觉的一个应用领域,双目测距的基本原理主要是三角测量原理,即通过视差来判定物体的远近。 阅读详情

相关推荐

多模态情感识别(MER)数据集实战指南:从IEMOCAP到应用落地

本文提供了多模态情感识别(MER)从数据集到应用落地的完整实战指南。以经典IEMOCAP数据集为例,详细讲解了音频、视觉、文本等多模态数据的预处理、特征提取与融合技术,并分享了模型训练调优心得及面向智能客服、在线教育等场景的部署考量,帮助开发者快速构建高效可用的MER系统。

h3i4j的博客 1071

ExcelVBA之Do while循环

VB有两种Do循环语句,只要或者直到某个条件为真,它们就会重复一系列的语句。只要条件为真,Do…While循环就允许你重复某个操作。这个循环的语法如下: Do While 条件 语句1 语句2 语句N Loop 当VB遇到这个循环时,它首先条件的真假,如果条件为假,循环内部的语句就不会被执行,VB将继续执行关键字Loop后面的第一条语句。如果条件为真,循环里面的语句则会被一条一条地执行,直到遇到Loop语句。Loop语句告诉VB重复这个过程,只要Do While语句里的条件为真的话。 Sub Te

soga235的博客 1万+

通信原理与MATLAB(八):2PSK的调制解调

通信原理和MATLAB

菜yuan~的博客 3万+

VBA中Do...Loop循环语句的运用

Do...Loop是VBA中的一种循环语句,用于重复执行特定的代码块,直到满足特定条件为止。有几种不同的方式可以使用Do...Loop,分别是Do While、Do Until、Do..Loop While和Do...Loop Until。

m0_74737305的博客 5033

solidworks vba二次开发配合问题

solidworks vba二次开发配合问题二次开发装配的步骤 二次开发装配的步骤 solidworks可以使用宏录制配合过程从而得到配合的vba代码,步骤如下: 1.选择两个配合的面(点、线等) 2. 建立配合 例如将两个圆柱面同心(图中高亮): 配合后 我们看一下宏录制的代码: Sub main() //激活solidworks接口 Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc //选择两个圆柱面,注意此处是根据坐标选择,不

Alejandro123的博客 3405

使用 ArcGIS Pro 和 Google Earth Engine 可视化地表温度

在这项研究中,利用 Landsat 热数据通过各种方法检查了 2013 年和 2023 年恰纳卡莱省的地表温度变化。使用了 NDVI、大气层顶部、亮度温度、植被比例和地表温度等公式。研究结果表明,从热图像中获得的数据,特别是地表温度(LST),是土地解释的重要资源。恰纳卡莱 — 土耳其(土耳其)使用 ArcGIS 程序和 Google Earth Engine 对不同季节的卫星图像进行分析。

gis收藏家的博客 1993

为什么宏定义要使用 do {...} while (0) ?

为什么宏定义要使用 do {...} while (0) ?

Guanngxu的博客 1123

飞书多维表格省钱攻略:1个专业版账号,全员合规用、权限全掌控

像运动馆、 托管班、作业辅导、少儿美术、书法、口才班等等。对于大多数中小团队而言,飞书多维表格的核心需求是“协作高效、数据可控、成本可控”,而“1个专业版账号+多联系人”的模式,恰好完美契合这三点——既不用为不必要的席位付费,又能解锁全部专业功能,还能通过精细化权限管控保障数据安全。尤其是餐饮店、乒乓球训练馆这类个体经营或小型团队,人员分工清晰、权限需求明确,采用这种模式能最大化节省成本,同时提升管理效率。无需复杂的配置,无需额外的技术支持,5分钟就能搭建起全员协作的省钱体系。

涛涛讲AI 2215

vba学习笔记 do while和 do until的使用

while 是在判断条件成立的情况下一直执行 until 是在判断条件成立的情况下跳出循环 先进行do的话则至少执行一次 Sub testDoWhile() Dim a As Integer Dim sum As Integer a = 1 Do While a <= 100 sum = sum + a a = a + 1 Loop MsgBox "1 + 2 + 3 + …… +1000 = " & sum, v

qq_25047389的博客 2045

ChatGPT Plus账号被降智?3个实用检测方法+终极解决方案(附国内支付指南)

本文针对ChatGPT Plus账号性能下降问题,提供了3个科学检测方法和系统级解决方案。通过详细分析症状、专业诊断技巧和优化策略,帮助用户有效应对GPT-4o等高级功能失效、响应质量下降等问题,特别包含国内用户关心的支付方案和账号管理建议。

weixin_42639633的博客 472

微信小程序 - 最新详细实现 “餐厅食堂外卖点餐“ 全屏左右联动菜单列表功能界面,附带搜索框、购物车功能、商品加减计算金额、折扣等,左侧商品分类,右侧列表数据,仿美团饿了么外卖点餐页面,饭店扫码点餐!

微信小程序,vue2,vue3,左右联动菜单,商品分类页面,点餐界面,美团外卖点餐,左右布局界面,饿了么点餐页面,左分类右列表,小程序实现左侧菜单,外卖点餐联动,锚点,点击左侧大类后侧列表跟着变跟着刷新,菜单左右联动效果,左菜单右边列表数据,uniapp,左侧菜单,右侧列表双向联动效果,右侧商品滑动时,右侧列表双向联动效果,侧边菜单和右边滚动条,电商项目,购物车,商品加减计算,外卖选餐页面带购物车计算,自动计算金额,微信小程序外卖点餐界面源码,店铺页面滑动左右联动,点餐类小程序界面,堂食,扫码点餐,餐饮行业

🏆 前端领域优质创作者 5160

while循环用法_宏程序的循环指令(WHILE语句)

循环指令(WHILE语句)格式:WHILE [条件表达式] DO m(m=1,2,3)...........END m............ 当条件表达式条件满足时,就循环执行DO与END之间的程序段,之间的程序段也称之为 “循环体”,当条件不满足时便执行END后的下一个程序段。DO和END后的数字m用于指定程序执行范围的识别号,该识别号只能在数字1 ,2 ,...

weixin_39852491的博客 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

do while(0)的妙用

do while(0)的妙用 do while(0);就如同一个花括号,具有独立的作用域,花括号所表示的符合语句是一个整体,do while(); 语句同样是一个整体,同样可以在if 等条件语句后直接使用。但是后所不同的是,do while(); 作为循环语句还可以使用break 跳出循环,程序执行流也就随之来到了do while(0);的下一条语句。下面就来介绍 do while(0);的三条...

Hello_MyDream的博客 3万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C语言带返回值的宏,宏函数使用{}与do{}while(0)的区别

宏函数是在编译时进行文本替换,这样可以提高代码的执行效率,普遍用于调用比较频繁的代码段。但是需要注意一些细节。

⭐小星星的博客⭐ 3448

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++中do...while(false)妙用

C++中do…while(false)妙用 C++中,循环逻辑有三种格式:for,while以及do...while();,前两种是比较常用的,循环逻辑也很直观,但是do...while()循环一般比较少见,它其实更多地是用在宏函数定义和代码结构优化中,具体看下面代码: 用在宏函数中 加入需要定义一个释放内存的宏函数,如下: #define SAFE_DELETE(ptr)

柚子树's Blog 1637

宏函数以及do{...}while(0)的巧妙用法

宏定义,编译预处理命令,在编译预处理时即进行简单的字符串替换。 宏定义函数和用户定义的函数在使用时有如下区别: 1、宏函数会在编译预处理时展开,只占用编译时间,函数调用则会占用运行时间(分配单元、保存现场、值传递、返回等),每次执行都需要载入,所以执行相对于宏较慢。 2、在函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。 3、函数调用是在程序运行时处理的,分配...

weixin_39936714的博客 1718

do-while(0)语句到底有什么用?

do-while(0)语句到底有什么用?

在嵌入式嵌入式领域奋斗的程序猿的博客 3191

从Redis 8.4.0源码看快速排序(1) 宏函数min和swapcode

本文分析min和swapcode宏函数的设计。该宏函数采用类似模板的方式实现类型安全的数组元素交换,通过(n)/sizeof(TYPE)计算交换次数,使用do-while循环完成批量交换。特别指出宏函数外层花括号的必要性,它能避免变量名冲突。文章还通过测试代码演示了swapcode的实际应用,并对比了预处理前后的代码差异。最后讨论了do-while(0)在宏定义中的作用,通过示例说明其能有效解决悬垂else问题,是编写复杂宏函数的良好实践。

zhangcoder的博客 记录学习轨迹~ 1351

【嵌入式C语言】--do{…}while(0)的学习

文章参考:(1条消息) C语言 -- do{…}while(0)的意义和用法_诸葛一帆丶的博客-优快云博客 在学习STM32H743的代码过程中,经常碰到一些有关do{...}while(0)的宏定义。 如,在学习stm32h7xx_hal_rcc.h文件时,就有相关的宏定义: #define __HAL_RCC_GPIOA_CLK_ENABLE() do { \ ...

xk554584023的博客 863

c语言do while的好处,do{}while(0)宏定义的好处

通过do-while(0)宏定义将代码打包起来,成为一个独立的语法单元,从而不会引起上下文混淆,同时因为绝大多数的编译器都能够识别do{…}while(0)这种无用的循环并进行优化,所以使用这种方法也不会导致程序的性能降低下面就举几个上下文混淆的例子来说明do-while(0)的好处例1先看一个简单的宏#define SAFE_FREE(p) do {free(p);p=NULL;} while(...

weixin_29327977的博客 619

C 语言宏函数:带参数宏的语法规则、优先级问题与do-while(0)包装技巧

带参数宏在 C 语言中非常有用,但必须遵守语法规则:用括号包围参数和表达式以避免优先级问题(如 $ a + b \times c $ 的意外计算),并使用 do-while(0) 技巧处理多语句宏,确保在控制结构中安全。始终添加括号防御优先级问题。对多语句宏使用 do-while(0) 包装。测试宏展开(如用gcc -E预处理),验证行为。通过这些技巧,您可以高效利用宏函数,提升代码质量和可维护性。如果有具体代码示例,我可以进一步分析!

2501_93893039的博客 309

do...while(0)的作用

今天在看一段开源代码时,发现里面的宏函数几乎都写成这样:#define xxx \ do { \ ... \ } while(0) 宏中间的代码只会执行一次,为什么要写在do...while(0)循环中呢? 假设一个宏函数定义为: #define fun() \ fun1(); \ fun2();那么在执行下面这段语句时就会出现问题。 i

RaceBug2010的专栏 1077

C/C++预处理指令和宏定义#define及 do while(0)

本文主要记录了C/C++预处理指令 #define 宏定义 do/while(0) 什么时候使用

一丁的博客 1162

宏函数为什么使用do{...}while{0}包起来

在我们看内核源码或者库以及一些优秀的源码时,都会发现他们的宏函数是包括在do{…}while(0)内。具体的原因其实想想就能明白。考虑下面一个特殊的例子。 宏函数的定义如下:#define test(x) \ a(x); \ b(x);如果在调用时是这样调用的:if (judge) test(x);那么展开之后就是:if (judge): a(x); b(x);这时产生的效果可能就

Move_now的博客 3514

Python 为什么不设计 do-while 循环结构?

△点击上方“Python猫”关注 ,回复“1”领取电子书作者:豌豆花下猫来源:Python猫在某些编程语言中,例如 C/C++、C#、PHP、Java、JavaScript 等等,do-w...

Python猫 1934

C 语言预处理全面总结(1):宏、#、##、do...while(0) 一网打尽

本文详细介绍了C语言预处理阶段的关键概念和技术要点。主要内容包括:1) 预处理三大任务(头文件展开、宏替换、条件编译)及gcc-E指令的使用;2) 头文件搜索路径规则(系统目录与自定义目录);3) 宏定义的"傻瓜式替换"特性及注意事项,包括使用括号解决运算符优先级问题;4) 宏定义的实际应用场景(消除幻数、定义宏函数);5) 宏函数与普通函数的性能比较;6) #和##运算符的特殊用法;7) 内置宏的使用;8) typedef与#define的区别

Ice_light_CN的博客 570
上一篇: 嵌入式工程师的知识结构
下一篇: ARM MIPS PowerPC比较
embedded_man2011
博客等级 码龄16年 15粉丝 12原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值