do while(0)的妙用
来源:互联网 发布:小众软件官网 编辑:程序博客网 时间:2024/06/07 12:23
当我刚看见do while(0)语句的时候,相信大家和我的感觉一样,这还不是相当于没有循环么,么啥作用,底下就是和大家分享这种技巧的妙用.
注意看这个Function Macros(函数宏)的定义
什么原因呢,接下来给大家分析分析.
这样当然可以,但是在编写程序的时候有一个习惯,那就是在每一条语句后面加上 ; 号,所以这种方式在调用的时候替换后如下:
这样的话在编译if语句的时候就会出错.
就会避免上面的所有错误,函数宏替换后如下
do while(0)这种技巧的使用,一般都会出现在函数宏当中,使用它可以解决烦人的分号问题.估计第一次接触到这个的人现在已经充满了疑问.咱分析底下源代码.
点击(此处)折叠或打开
- #include<stdio.h>
- #include<math.h>
- #include<stdlib.h>
- #define SQUARE(num) num=sqrt(num);printf("%f\n",num); //Function Macros
- int main(void)
- {
- float n;
- scanf("%f",&n);
- if(n>0)
- SQUARE(n);
- else{
- printf("the number is negative number!\n");
- exit(1);
- }
- return 0;
- }
点击(此处)折叠或打开
#define SQUARE(num) num=sqrt(num);printf("%f\n",num);//Function Macros
当你运行这个程序时,这块提醒一点,这块要加入链接函式库才可以正常编译,即 gcc test.c -lm
这块大家有问题的话,自己想办法解决.当编译完之后,大家会发现出现以下错误.
点击(此处)折叠或打开
- test.c: In function ‘main’:
- test.c:10: error: ‘else’ without a previous ‘if’
大家看这函数宏,当main()函数执行到SQUARE(n)的时候,简单的函数宏替换之后,如下
点击(此处)折叠或打开
- if (n>0)
- n=sqrt(n);
- printf("%f\n",n);
- else{
- printf("the number is negative number!\n");
- exit(1);
- }
相信大家这下就理解造成这个错误的原因了吧.因为if语句底下由两条语句,而如果不用花括号的话,底下的else语句就没有与其匹配的if语句.估计这个时候大家就想,那我在定义函数宏的时候加上花括号行不,如下
点击(此处)折叠或打开
- #define SQUARE(num) {num=sqrt(num);printf("%f\n",num);}
- //Function Macros
点击(此处)折叠或打开
- if (n>0){
- n=sqrt(n);
- printf("%f\n",n);
- };
- else{
- printf("the number is negative number!\n");
- exit(1);
- }
下来就是do while(0)语句的妙用
我们把函数宏修改成为底下的形式
点击(此处)折叠或打开
- #define SQUARE(num) do{num=sqrt(num);printf("%f\n",num);}while(0) //Function Macros
点击(此处)折叠或打开
- if (n>0)do{
- n=sqrt(n);
- printf("%f\n",n);
- }while(0);
- else{
- printf("the number is negative number!\n");
- exit(1);
- }
相信通过这几个例子的分析,大家对do while(0)技巧有所掌握
0
上一篇:我的25年嵌入式生涯-周立功
下一篇:do while(0)的妙用
相关热门文章
- A sample .exrc file for vi e...
- IBM System p5 服务器 HACMP ...
- 游标的特征
- busybox的httpd使用CGI脚本(Bu...
- Solaris PowerTOP 1.0 发布
给主人留下些什么吧!~~
评论热议
0 0
- do/while(0)的妙用
- do/while(0)的妙用
- do/while(0)的妙用
- do...while(0)的妙用
- do/while(0)的妙用
- do/while(0)的妙用
- do...while(0) 的妙用
- do {} while(0)的妙用
- do...while(0)的妙用
- do...while(0)的妙用
- do...while(0)的妙用
- do...while(0)的妙用
- do...while(0)的妙用
- do...while(0)的妙用
- do...while(0)的妙用
- do{}while(0)的妙用
- do{...}while(0)的妙用
- do...while(0)的妙用
- 结构体和共用体关于内存的分配问题
- C语言排序算法
- 认识软件有趣的说法
- BaseAdapter的深度学习
- app第一次启动
- do while(0)的妙用
- do while(0)的妙用
- 博客,记录我的点点滴滴
- 一道关于位段的面试题
- shell脚本实现对网卡流量监控
- HTTP 头部解释
- 正则表达式入门到精通
- 编写安全代码:避免奇怪的逻辑引发的bug
- mysql - select总结
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
混凝土泵送机械
混凝土泵送增加费
潜水泵管价格
混凝土输送泵泵管
高压混凝土泵管
输送泵管
泵管厂家
盐山泵管厂家
管中泵无负压供水设备
高压泵管
混凝土输送泵管
混凝土泵车输送管
盐山泵管
地泵管价格
机床泵
转子泵生产厂家
臂架泵型号
蒸汽泵零件
转子泵报价
立式泵机械密封
立式泵安装
电动试压泵生产厂家
柴油机手动泵
中联重科泵车配件
洗车泵配件
真空泵配件
充气泵配件
自吸泵配件
车载充气泵配件
混凝土输送泵配件
渣浆泵配件
矿用乳化液泵配件
潜水泵配件
衬胶泵配件
lowara水泵维修
水泵控制柜维修
机电水泵维修
水泵维修电话
水泵备品备件
水泵零件
三相水泵维修