C语言干货-#define为什么使用do while(0) #C语言 #define #dowhile语句#电子工程师 #电子爱好者 - 郭天祥老师讲电子于20240424发布在抖音,已经收获了75.0万个喜欢,来抖音,记录美好生活!
同时因为绝大多数的编译器都能够识别do{…}while(0)这种无用的循环并进行优化,所以使用这种方法也不会导致程序的性能降低。 详解如下:MFC, 在MFC的afx.h文件里面, 你会发现很多宏定义都是用了do...while(0)或do...while(false), 比如说: #define AFXASSUME(cond) do { bool __afx_condVal=!!(cond);...
C语言干货-#define使用do while(0) #C语言 #define #电子工程师 #代码编程 #电子爱好者 - 郭天祥老师于20240424发布在抖音,已经收获了5052个喜欢,来抖音,记录美好生活!
这样一来,无论condition是true还是false,bar(x)都会被调用。 这时候do{...}while(0)的价值就体现出来了,修改一下FOO的定义 #defineFOO(x) do { foo(x); bar(x); }while(0) 这样FOO,放入控制语句中就没有问题了。 也许有人说:把foo(x);bar(x)用大括号括起来不就行了吗?比如这样定义: #defineFOO...
#define foo() do{}while(0) 2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。 3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现: #define foo(x) \ action1(); \ action2(); 在以下情况下: if(NULL == pPointer) foo(); 就会出现action1和action2不会同时被执行的...
经常在define语句中看到用do{} while(0)将一个程序片段包起来,一直感觉很奇怪,经查找,才发现这是在define语句使用中的一个tricky的情况。 define表达使用do{} while(0)的两个例子: #define LIST_INSERT_AFTER(listelm, elm, field) do { \ if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), fie...
C语言中宏定义(#define)时do{}while(0)的价值 2015-12-28 17:00 −最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总结了一下讨论,加上自己的理解,do{...}while(0)的价值主要体现在: 1. 增加代码的适应性 下面的宏定义没有使用do{...}while(...
也就是说,多条语句中用do{}while(0)封装,可以安全使用宏。 此外,如果do_something_on(a);同样是包含if else的语句,就好和原代码中的if else混淆,引起不必要的错误。 2.限制赋值,限制嵌套使用宏 #define ADD(a) do{a++;}while(0); #define ADD(a) a++; ...
while(0)后面不要";假如出现下面这种情况:if (true)FUN(1);else func2();当加上分号时,编译就会报错
使用do{}while(0)包裹代码 尽管C语言中的“函数式宏定义”和真正的函数相比有一些缺点,但只要小心使用还是会显著提高代码的执行效率的,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作。正因为如此,Linux 内核中有相当多的方法是使用 define 宏定义实现的,并且,在内核C语言代码中,“函数式宏定义”经常借...