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

Microsemi Libero使用技巧1——查看芯片资源占用情况 Microsemi Libero使用技巧——查看芯片资源占用情况 前言 与MCU不同,FPGA的资源主要包括:逻辑资源,IO资源,Flash大小,PLL资源,SoC硬核处理器资源等,其中逻辑资源和IO资源是我们主要关心的,本篇文章将介绍,如何通过Microsemi Libero IDE来查看工程的详细资源占用情况。 A2F200M3F的资源 以Microsemi SmartFusion系列A2F2... 阅读详情

下面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来代替域名符{ }防止非单行宏语句展开出错!

 

雷达方程从零开始的详细推导及实现 通过以上六步,我们从最基本的物理图像出发,完整地推导出了雷达方程。初学者可以按照这个逻辑,自己在纸上一步步重现整个过程。Python实现。 阅读详情

相关推荐

AHB2eflash 控制器设计笔记

① SRAM② DRAM③ SSD④ SATA⑤ U 盘⑥ 移动硬盘⑦ 机械磁盘eflash。

weixin_46220498的博客 3077

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万+

Kotlin kapt插件报错全解析:从Could not load module到彻底解决(含Gradle 8.2.2适配指南)

本文深度解析了Kotlin开发中常见的kapt插件报错“Could not load module”的根源,并提供了从诊断到解决的完整方案。重点探讨了Gradle 8.2.2与Kotlin 1.9.x的兼容性问题,包括JVM IR后端冲突、配置缓存问题及依赖版本对齐,并给出了详细的调试技巧与迁移至KSP的建议。

rrr55的博客 315

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

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

m0_74737305的博客 5033

缺陷检测:使用PatchCore训练自己的数据集

必须包含有训练图片(无缺陷图片)、测试图片(缺陷图片)和ground_truth,并且ground_truth必须与对应图片的名称相同。同上一篇结果一样,我的输出为原始图片大小,但是不知道是不是因为图片不是正方形的,导致训练结果不好。编写一个脚本,重新规划数据集的路径规则,但是我稍微写复杂了一点,使用了类来操作。第二种(复杂):编写一个自己的Dataset,参考。第一种(简单):将数据集路径规则改成项目中。返回的必须是一个字典类型,可以阅读。本人此次使用的是第一种方法。运行时,参数部分直接输入。

xiaoxTai的博客 6478

智能车图像处理5-入门级分析4 ---环岛的状态机与补线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 8235

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

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

Guanngxu的博客 1123

64、5G 侧链通信技术详解

本文详细解析了5G侧链通信的关键技术,包括资源感知与选择、UE间协调、混合ARQ、功率控制、信道探测与CSI报告以及侧链同步。资源感知与选择通过周期性或随机方式实现资源分配,UE间协调通过主动或被动方式避免资源冲突。混合ARQ机制确保数据传输可靠性,功率控制和信道探测优化传输质量并减少干扰。侧链同步则通过多种方式确保设备间时间一致性。这些技术相互配合,构建了高效稳定的5G侧链通信体系,适用于智能交通、物联网、应急通信等多个领域,为未来无线通信发展提供强大支撑。

oil88的博客 101

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

AutosarMCAL开发——基于EB CRC驱动

本文为博主个人理解总结记录,如有不正,欢迎指正。

qq_45583706的博客 1389

Google Earth Engine:计算逐年全球潜在蒸发量(PET)的 ERA 数据

通过获取温度、湿度和降水数据,并使用Penman-Monteith公式,我们可以得到每年的潜在蒸发量。在本文中,我们将使用Google Earth Engine平台和ERA(欧洲再分析气象数据集)数据来计算逐年全球的潜在蒸发量(PET)。接下来,我们需要对ERA数据进行预处理,以获取我们需要的潜在蒸发量数据。有了温度、湿度和降水数据,我们可以使用Penman-Monteith公式来计算每年的潜在蒸发量。最后,我们可以将计算得到的潜在蒸发量数据进行可视化,以便更好地理解全球的水汽蒸发情况。

VwajAlgorithm的博客 730

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

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

weixin_39852491的博客 2万+

ABAP RANGES及比较符号

RANGES *选项介绍: *1.SIGN 值为 I 和 E 。 I是包含, E是排除, 一般使用I。 2.OPTION 如果HIGH 为空 ,为单值选择 。有 EQ、NE、GT、LE、LT等逻辑操作 对于的 CP包含 NP是排除 如果HIGH 不为空 为区间选择 有BT,NB可选 *3.LOW 低值 *4.HIGH 高值 lt:less than 小于 le:less than or equal to 小于等于 eq:equal to 等于 ne:

Pegasus666的博客 5389

do while(0)的妙用

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

Hello_MyDream的博客 3万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

⭐小星星的博客⭐ 3448

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

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

柚子树's Blog 1637

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

宏函数以及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
上一篇: 嵌入式工程师的知识结构
下一篇: 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、付费专栏及课程。

余额充值