do{...}while(0)what is it good for?

Python基础:If 、While和for 的循环用法及区别 Python里最常用if、while、for语句来实现判断和循环,具体有什么区别呢,以及在使用while和for的时候有没有break的区别是什么呢? 阅读详情

 I assume it's good for inner scope variable declaration and for using breaks (instead of gotos.)

It's the only construct in C that you can use to #define a multistatement operation, put a semicolon after, and still use within an if statement. An example might help:

#define FOO(x) foo(x); bar(x)

if (condition)
    FOO(x);
else // syntax error here
    ...;

Even using braces doesn't help:

#define FOO(x) { foo(x); bar(x); }

Using this in an if statement would require that you omit the semicolon, which is counterintuitive:

if (condition)
    FOO(x)
else
    ...

If you define FOO like this:

#define FOO(x) do { foo(x); bar(x); } while (0)

then the following is syntactically correct:

if (condition)
    FOO(x);
else
    ....

It is a way to simplify error checking and avoid deep nested if's. For example:

do {
  // do something
  if (error) {
    break;
  }
  // do something else
  if (error) {
    break;
  }
  // etc..
} while (0);

解锁IPG Photonics SmartWeld系统,开启焊接新时代 SmartWeld 系统是 IPG Photonics 研发的一款先进的激光焊接解决方案,它隶属于自动化激光焊接系统类别 ,但却凭借一系列创新技术和独特设计,在众多同类产品中脱颖而出。该系统基于 IPG 在光纤激光技术领域的深厚积累,融合了先进的光束控制、智能监测和自动化控制等技术,旨在为工业制造提供高效、精准且稳定的焊接工艺。与传统激光焊接系统相比,SmartWeld 系统的独特之处首先体现在其光束控制技术上。它能够精确地调整激光束的能量分布、光斑大小和形状 ,以适应不同材料和焊接工艺的需求。 阅读详情

相关推荐

手把手教你用示波器测试DDR5 DRAM信号完整性(附眼图分析技巧)

本文详细介绍了如何使用示波器测试DDR5 DRAM信号完整性,包括眼图分析技巧。从DDR5的核心挑战、测试设备选型到实测工作流程,提供了全面的指导。特别强调了DFE功能验证和系统级协同测试,帮助工程师解决信号完整性问题,提升测试效率。

g2h3i4j5的博客 1150

do { … } while (0) what is it good for?

do { … } while (0) what is it good for? It's the only construct in C that you can use to #define a multistatement operation, put a semicolon after, and still use within an...

weixin_33725807的博客 86

高速设计注意事项总结——MDI篇

在以太网高速通信系统中,MDI(Medium Dependent Interface,介质相关接口)是连接物理层芯片(PHY)与传输介质(如网线)的关键接口,其设计直接影响信号完整性、传输速率和抗干扰能力。本文围绕 MDI 及 RJ45 接口电路、关键参数、设计与布线要点展开,为高速以太网设计提供参考。本文包含MDI 及 RJ45 接口电路组成、电路设计注意事项、布局布线要求等内容

qq_16237389的博客 1445

What is the purpose of using do {...} while (0) in macros?

The do/while(0) pattern seen in many if not most macros in the Linux kernel and elsewhere has a specific purpose: It is the only construct in C that lets you define macros that always work the same

michaelrun的专栏 915

数据采集卡架构与PCIe优化设计详解

数据采集卡(DAQ)作为工业自动化中的关键设备,其核心在于模数转换(ADC)和数字信号处理技术。现代系统普遍采用PCIe总线架构,通过DMA传输和时钟同步技术实现高速数据采集。在信号调理环节,可编程增益放大器(PGA)和抗混叠滤波器确保信号质量;而Σ-Δ型ADC则提供高达24位的分辨率。实际应用中,从电力监测到机床振动分析,数据采集卡需要结合具体场景优化配置。通过合理的PCB布局和EMI防护设计,可以有效提升系统在工业环境中的可靠性。

weixin_29168675的博客 909

Kubernetes CRD 系列(一):CRD 介绍

CR(Custom Resource)其实就是在 Kubernetes 中定义一个自己的资源类型,是一个具体的 “自定义 API 资源” 实例,为了能够让 Kubernetes 认识这个 CR,就需要让 Kubernetes 明白这个 CR 的宏观定义是什么,也就是需要创建所谓的 CRD(Custom Resource Definition)来表述。 可能这么说并不是太直观,换个方式表达一下,我们想要创建一个 Pod 的时候,那么会编写一个 YAML 配置,然后前两行一般会这么写: [root@l

会哭的雨@的博客 7920

java for循环几种形式_Java中循环有三种形式 while、do-while 和 for

Java中循环有三种形式 while循环、do-while循环 和 for循环。其中从Java 6 开始for循环又分 普通for循环 和 for-each循环两种,我们接下来分别讲解。while 循环当条件为真时执行while循环,一直到条件为假时再退出循环体,如果第一次条件表达式就是假,那么while循环将被忽略,如果条件表达式一直为真,那么while循环将一直执行。关于while 括号后的表...

weixin_42510888的博客 2522

【LaTeX PPT模板集】Beamer主题与配色使用教程

【LaTeX PPT模板集】Beamer主题与配色使用教程

Xminyang的博客 1万+

awk 控制语句(if for do while)

在linux awk的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。 awk中,流程控制语句,语法结构,与c语言类型。下面是各个语句用法。 一.条件判断语句(if) if(表达式) #if (Variable in

学习之路 1182

PyQtWebEngine安装避坑指南:快速解决ModuleNotFoundError

本文详细解析了PyQt5开发中常见的ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'错误。核心原因是PyQt5 5.11版本后,网页引擎组件被独立为PyQtWebEngine包。文章对比了退回旧版本、独立安装及使用Conda等多种解决方案,并提供了针对Windows、macOS和Linux不同平台的实战安装指南与验证方法,帮助开发者快速解决依赖问题。

weixin_29056101的博客 427

振镜控制卡硬件接口揭秘:XY2-100/SL2-100协议对比

本文对比分析了工业振镜控制领域两种主流数字通信协议XY2-100和SL2-100的硬件接口差异与应用场景。XY2-100作为开放式协议兼容性强,采用LVDS差分信号传输,适用于激光打标等中高精度场景;SL2-100为半封闭协议,采用RS485差分信号,专为高速响应场景设计。文章详细解析了两种协议的引脚定义、通信机制和性能参数,指出XY2-100适配多品牌振镜且调试简单,SL2-100则更适合Nutfield专用设备的高速高精度需求。最后提供了接口调试的实操建议和选型逻辑,强调应根据具体应用场景的精度、速度和

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 636

第3节 if,switch,do,while,for分析

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删. 第一: if和switch语句 #include <stdio.h> void f1(int i) { if( i < 6 ) { printf("Failed!\n"); } else if( ...

一名从事物联网开发者的博客 317

UFSV3.1-RPMB实现与测试

UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。

小码哥的博客 1254

循环大总结!while循环,for循环,do,while循环傻瓜式讲解

循环大总结!while循环,for循环,do,while循环傻瓜式讲解

lmbuhuiku的博客 647

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

awk 流程控制语句(if,for,while,do)详细介绍

在linux awk的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。 awk中,流程控制语句,语法结构,与c语言类型。下面是各个语句用法。 一.条件判断语句(if)if(表达式) #if ( Variable in Array ...

把握自己。 1350

Devexpress16.2.6破解工具

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

linux awk if 多个条件,linux shell awk 流程控制语句(if,for,while,do)详细介绍

在linux awk的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。 awk中,流程控制语句,语法结构,与c语言类型。下面是各个语句用法。一.条件判断语句(if)if(表达式) #if ( VariableinArray )语句...

weixin_35319943的博客 4089

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

linux sh while嵌套,linux shell awk 流程控制语句(if,for,while,do)详细介绍

在linux awk的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。 awk中,流程控制语句,语法结构,与c语言类型。下面是各个语句用法。一.条件判断语句(if)复制代码代码如下:if(表达式) #if ( Variable i...

weixin_32365089的博客 881

c语言while语句里if,C语言中流程控制语句(if,switch,for,while,do-while,continue,break,return)...

条件语句在Turbo C2.0中条件语句的一般形式为:if(表达式)语句1;else语句2;上述结构表示: 如果表达式的值为非0(TURE)即真, 则执行语句1, 执行完语 句1从语句2后开始继续向下执行;如果表达式的值为0(FALSE)即假, 则跳过语句1而执行语句2。注意:1. 条件执行语句中"else 语句2;"部分是选择项,可以缺省, 此时条件语句变成:if(表达式)语句1;表示若表达式的...

weixin_31302909的博客 807

while for do while 循环区别

import java.util.Scanner; public class Demo2 { public static void main(String[] args) { 先执行,在自增 如果循环条件不满足,不执行,直接跳过. int i = 0; while (i<=10){ System.out.println("好好学习,天天向上"); i++; .

ZhuZhiLei_的博客 354

Java用ArrayList演示添加字符串元素、获取集合元素个数、分别用foreach、iterator、传统for循环、while、do while 5种方法遍历

/* 用ArrayList演示添加字符串元素、获取集合元素个数、分别用foreach、iterator、传统for循环、while、do while 5种方法遍历 */ package com.zuoye; import java.util.ArrayList; import java.util.Iterator; public class ArrayListTest { public static void main(String[] args) { ArrayList mm = new ArrayLis

eric3012的博客 1510

在…和do…while循环中使用JavaScript

Less common than the standard for loop, do and do… while loops have particular use-cases that make them invaluable in JavaScript development. 较少见的不是标准for厕所 P, do和do… while循环有特殊的使用情况,使他们在JavaScript开发无价...

cungui5726的博客 204

实现人机交互界面——do{}while();的用法

方法一:do_while #include<stdio.h> #include<stdlib.h> main() { int n; do { printf("C语言三百例\n"); printf("1.hello,0\n"); printf("2.nice to meet you,too.\n"); printf("3.good morning!three.\n"); printf("4.have a good time,four.\n"); pr

zaveqwe的博客 561

linux shell awk 流程控制语句(if,for,while,do)详细介绍

linux shell awk 流程控制语句(if,for,while,do)详细介绍 在linux awk的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。if 是流程选择用法。 awk中,流程控制语句,语法结构,与c语言类型。下面是各个语

u014034019的专栏 814

C语言复习合集【7】控制语句 【if - else语句、switch语句、循环语句(goto,while,do-while,for)、辅助控制语句(break,continue,return)】

控制语句 if - else语句、switch语句、循环语句(goto,while,do-while,for)、辅助控制语句(break,continue,return)

2301_80013104的博客 682

while循环、dowhile、for循环

while循环、dowhile循环、for循环、流程控制语句中的brerak与continue,循环嵌套的结构与语法,以及用循环嵌套语句打印图形

qq_43877180的博客 394

C/C++的宏定义中使用do{...}while(0)的目的是什么?

首先说明的一点是,这个是百度面试的时候问的一个问题,处于把问题弄透的一个原则,在网络上找了好多资料,其中一个还是比较好的,原文链接:https://www.quora.com/What-is-the-purpose-of-using-do-while-0-in-macros。 Thedo/while(0)pattern seen in many if not most macros in the Linux kernel and elsewhere has a specific purpose: It..

flysky_jay的博客 415
上一篇: ios设备分辨率
下一篇: cocos2d-x锚点
speedge
博客等级 码龄19年 8粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值