C语言干货-#define为什么使用do while(0) #C语言 #define #dowhile语句#电子工程师 #电子爱好者 - 郭天祥老师讲电子于20240424发布在抖音,已经收获了75.0万个喜欢,来抖音,记录美好生活!
C语言干货-#define使用do while(0) #C语言 #define #电子工程师 #代码编程 #电子爱好者 - 郭天祥老师于20240424发布在抖音,已经收获了5052个喜欢,来抖音,记录美好生活!
同时因为绝大多数的编译器都能够识别do{…}while(0)这种无用的循环并进行优化,所以使用这种方法也不会导致程序的性能降低。 详解如下:MFC, 在MFC的afx.h文件里面, 你会发现很多宏定义都是用了do...while(0)或do...while(false), 比如说: #define AFXASSUME(cond) do { bool __afx_condVal=!!(cond);...
这样一来,无论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 MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下几个原因: 1,空的宏定义避免warning: #define foo() do{}while(0) 2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。 3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现: #define foo(x) \ action1...
Define 语句中的do{} while(0) 经常在define语句中看到用do{} while(0)将一个程序片段包起来,一直感觉很奇怪,经查找,才发现这是在define语句使用中的一个tricky的情况。 define表达使用do{} while(0)的两个例子: #define LIST_INSERT_AFTER(listelm, elm, field) do { \...
do-while 2020-03-15 14:06 −一、帮助定义复杂的宏以避免错误 假设你需要定义这样一个宏: #define DOSOMETHING() foo1(); foo2(); 这个宏的本意是:当调用 DOSOMETHING() 时,函数 foo1() 和 foo2() 都会被调用。但是如果你在调用的时候这么写: if(a > 0)... ...
while(0)后面不要";假如出现下面这种情况:if (true)FUN(1);else func2();当加上分号时,编译就会报错
#define ... do{}while(0) 除了保证他是一个完整的语句块之外,还有很多好处: 1.因为宏替换是将原内容在替换处直接粘贴,加上do{ }while(0),能保证不会出现语法错误。 Method 1. #define FOO(a) { do_something_on(a); } if (isOK())
使用do{}while(0)包裹代码 尽管C语言中的“函数式宏定义”和真正的函数相比有一些缺点,但只要小心使用还是会显著提高代码的执行效率的,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作。正因为如此,Linux 内核中有相当多的方法是使用 define 宏定义实现的,并且,在内核C语言代码中,“函数式宏定义”经常借...