c59—C语言 if语句 大括号和不加大括号的区别

本文探讨了C语言中使用do-while结构进行复杂宏定义的原因,主要在于它可以消除末尾分号的影响,使得宏更像函数调用。通过示例代码,展示了PrintNumber宏的不同实现方式,包括使用分号和do-while。在test01函数中,这些宏被用于处理浮点数的整数和小数部分。关键词包括宏定义、do-while、C语言、函数式宏。
摘要由CSDN通过智能技术生成

根据参考测试

.h

#include <stdio.h>

#define PrintNumber1(num) \
    int iIntPart;            \
    double dDecimalPart;    \
    iIntPart = (int)num;     \
    dDecimalPart = num - iIntPart;     \
    printf("Integer part: %d\n", iIntPart);     \
    printf("Decimal part: %lf\n", dDecimalPart);  \


#define PrintNumber2(num) {  \
    int iIntPart;            \
    double dDecimalPart;    \
    iIntPart = (int)num;     \
    dDecimalPart = num - iIntPart;     \
    printf("Integer part: %d\n", iIntPart);     \
    printf("Decimal part: %lf\n", dDecimalPart);  \
}

#define PrintNumber3(num) do {  \
    int iIntPart;            \
    double dDecimalPart;    \
    iIntPart = (int)num;     \
    dDecimalPart = num - iIntPart;     \
    printf("Integer part: %d\n", iIntPart);     \
    printf("Decimal part: %lf\n", dDecimalPart);  \
}while(0)


int test01();

.c

#include "PrintNumber.h"

static void test01_01(){  

     PrintNumber1(12.89);

} 

static void test01_02(){  
     float fValue = 32.12;    
     if (fValue > 0)  
          PrintNumber2(fValue);     
} 

static void test01_03(){  
     float fValue = 32.12;    
     if (fValue > 0)  
          PrintNumber3(fValue);
     else
          printf("para err\n");
} 


int test01(){   
    test01_01();
    test01_02();
    test01_03();
    return 0;

}

总结起来就是:这样定义的目的是:使用do-while句式,可以吸掉一个分号,让我们可以像使用函数一样,来使用宏。

参考:

c语言宏定义_为什么C语言中复杂的函数式宏定义常用do while(0)的方式定义?_weixin_39676930的博客-CSDN博客

C语言 if语句 大括号和不加大括号的区别_一个噗噗的博客-CSDN博客_c语言不加大括号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值