在C 语言中,使用 do-while 结构来定义宏时,通常是为了确保宏定义中的代码块在使用时可以像一个独立的语句一样被执行。 do-while 结构的基本语法是: #define MACRO_NAME(arguments...) do { \ /* macro definition */ \ } while ( (注意while(0)后面没有分号) 这里的 do { ... } while (0) 实际...
先看这句话:do{...}while(0)在C中是唯一的构造程序,让你定义的宏总是以相同的方式工作,这样不管怎么使用宏(尤其在没有用大括号包围调用宏的语句),宏后面的分号也是相同的效果。这句话的意思是说,在宏定义中使用do...while(0)包含的所有语句是一个代码块,不会受到{};的影响。 看一个例子: 1 2 3 4...
宏被展开后,上面的调用语句会保留初始的语义,同时绝大部分编译器都能够识别do{...}while(0)这种无用的循环并进行优化,不会导致性能优化的降低。 小结 在Linux内核和驱动代码还有cocos2d-x中,很多宏实现都使用do{...}while(0)来包裹他们的逻辑,Google的Robert Love(先前从事Linux内核开发)给我们解答如下: “ 让...
在Linux内核中,经常会看到do{} while(0)这样的语句,许多人开始都会疑惑,认为do{} while(0)毫无意义,因为它只会执行一次,加不加do{} while(0)效果是完全一样的,其实do {}while(0)的用法主要用于宏定义中。 这里用一个简单的宏来演示: #defineSAFE_FREE(p)do{free(p);p=NULL;}while(0) 假设这里去掉...
while(0) 如上的宏定义,是否能理解?本文,我们就聊聊宏定义与do{...}while(0)的结合。 1、宏的使用 开发中,宏的使用很频繁。为了精简代码的编写过程,有时,我们会将多条语句用一个宏表示。 示例1: #define PBUF_POOL_FREE_OOSEQ_QUEUE_CALL() do { \ ...
实际上do...while(0)的作用远大于美化代码,现总结起来主要有以下几个作用: 1. 辅助定义复杂的宏,避免引用的时候出错,提高代码健壮性 假设你需要定义一个这样的宏: #defineDOSOMETHING()\func1();\func2(); 这个宏的本意是,当调用DOSOMETHING()时,函数func1()和func2()都会被调用。但是如果你在调用的时候...
如果没有使用do{}while(0)定义这样的宏,进而在if语句后扩展这样的宏又没用{}括起来,会导致宏展开后语法逻辑错误。故这也是为什么单条if else语句也推荐使用{}括起来的原因之一。 使用do{….}while(0) 把它包裹起来,成为一个独立的语法单元,从而不会与上下文发生混淆。并且可以在宏之后添加分号,符合语句结束添加...
`do...while(0)` 在 C 语言中是一个惯用的技巧,通常用于宏定义。其主要目的是创建一个作用域,以便在宏中包含多个语句而不引入额外的问题。这种构造通常与 `if` 等条件语句一起使用,以确保宏在展开时不会引发语法错误。 考虑以下例子,其中使用了 `do...while(0)` 技巧: ...
inta; a =10;do{intb; b =20; }while(0); AI代码助手复制代码 6. 避免由宏引起的警告内核中由于不同架构的限制,很多时候会用到空宏。在编译的时候,这些空宏会给出警告,为了避免这样的warning,我们可以使用do{...}while(0)来定义空宏: #defineDOSOMETHING() do{}while(0) ...
C语言干货-#define为什么使用do while(0) #C语言 #define #dowhile语句#电子工程师 #电子爱好者 - 郭天祥老师讲电子于20240424发布在抖音,已经收获了82.6万个喜欢,来抖音,记录美好生活!