C语言宏定义中使用 do{}while(0) 的情形
先来看宏定义的一个经典例子;使用MFC;新建单文档工程,把宏定义在视类CPP文件头部;
void CHongdoView::OnDraw(CDC* pDC)
{CHongdoDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;int x = 101, y = 202;swap(x, y);//printf("%d %d\n", x, y);str1.Format("%d %d", x, y);pDC->TextOut(20, 20, str1);
}
输出如下;
如果如下使用宏,看上去没错;但是不能通过编译;因为宏展开之后if分支后的语句的分号出了问题;
如果如下图写就没问题;去掉if分支之后的语句的分号; 但是这么写容易误导,因为语句之后没有分号;
如果如下图定义宏,就可以适应if-else;
使用宏和运行结果如下图;
我还没遇到这种情形; 最初见到在宏定义使用 do{}while(0) 是在浏览Linux源码时;
C语言宏定义中使用 do{}while(0) 的情形相关推荐
- 巧用c语言宏定义实现自动注释调试代码,C语言宏定义中的特殊用法
C宏定义中的特殊用法 在分析一些C源码时,经常会遇到各种宏定义操作,本文即总结一下C语言宏定义中常见的预定义宏.调试宏:宏的条件编译用法及特殊的宏关键字用法. #undef 限定宏的作用域 一般来讲宏 ...
- C语言宏定义中#号的作用
C语言宏定义中#号的作用 前言 #号的作用 前言 最近,在阅读uboot的源码过程中,发现了一段宏定义代码: #define U_BOOT_CMD_MKENT_COMPLETE(_name, _max ...
- c程序语言符号的作用,c语言宏定义中的#,##,#@及\符号的作用
1.#(stringizing)字符串化操作符 作用:将宏定义中的传入参数名转换成用一对双引号括起来参数名字符串.其只能用于有传入参数的宏定 义中,且必须置于宏定义体中的参数名前. 如: #def ...
- c语言井号字符什么意思,关于c语言宏定义中的单#(井号)和双#(井号)
看了这篇文章后了解了,但是文章中的例子比较特别,我在这里加个注释好了. 单井号就是将后面的 宏参数 进行字符串操作,就是将后面的参数用双引号引起来 双井号就是用于连接. 比如文章中的例子: #defi ...
- C语言宏定义中的字符串替换
## 是连接符号,连接两个字符串 #是把名字代替成参数中的字符串 #define PRINTF(value) printf( #value " = %d/n", value ); ...
- C语言宏定义中UL的含义
1.U表示 unsigned 无符号,L表示 long 长整数.后缀大小写都可以,可以单独使用(100U),也可以组合使用(100UL). 2.F表示float,但是F不可以和U组合,因为浮点数没有u ...
- C语言宏定义中#define中的井号#的使用
#include <stdlib.h> #include <stdio.h> #include <string.h>typedef enum {E_1,E_2,E_ ...
- c语言 宏定义 去除宏定义_如何检查是否在C中定义了宏?
c语言 宏定义 去除宏定义 To check whether a Macro is defined or not in C language – we use #ifdef preprocessor ...
- c语言长度宏定义运算符,C语言在宏定义中使用语句表达式和预处理器运算符
语句表达式的亮点在于定义复杂功能的宏.使用语句表达式来定义宏,不仅可以实现复杂的功能,而且还能避免宏定义带来的歧义和漏洞.下面以一个简单的最小值的宏为例子一步步说明. 1.灰常简单的么,使用条件运算符 ...
最新文章
- 2019最具特色的web前端技术分享
- java学习笔记(九)----多线程
- 关于jQuery.click()函数
- android和ios HybridApp的js交互
- 个人电脑的楷模:新款IMac G5
- zabbix监控mysql操作
- h5的fetch方法_HTML5 fetch API
- java装箱和拆箱的意义_java的自动拆箱和装箱是每个程序员都要知道的
- Matlab Tricks(二十一)—— 软阈值函数的实现
- mysql常用功能点
- kali之破解隔壁老王wifi
- Python——自动签到脚本
- 用python写猜数字游戏
- firewalld防火墙配置IP伪装和端口转发
- 关于win11兼容性视图模式
- 211毕业生3天被辞退:offer不等于工作稳了!
- UpdateData() 函数
- 【C语言】scanf函数报错
- javascript动态构建函数
- ava程序员必看基础书籍
热门文章
- Timer的schedule和scheduleAtFixedRate方法的区别解析
- STM32的USB相关资料(转载)
- CTFshow php特性 web104
- poj2065 SETI
- caffe中mnist数据集的运行
- C++中输入输出的十六进制八进制
- uicontrol图形对象用户界面的用法
- 用界面读取图片并且保存图片的方法
- 无忧考吧2017二级java_无忧考吧二级JAVA超级模拟软件下载_无忧考吧二级JAVA超级模拟软件官方下载-太平洋下载中心...
- 重根迭代法解方程(两种方法)(Python实现)