文章目录

  • 宏定义
  • 宏函数
  • 宏定义之闰年判断

宏定义

宏定义是C中三种预处理方式(宏定义、文件包含、条件编译)的一种,只做替换、不求解。

宏定义分为有参宏定义和无参宏定义两种。应特别注意有参宏定义的括号问题。
c语言编译工具会在预处理阶段,将宏名替换为字符串。

所以,我们可以把宏定义理解为,发生在程序编译之前的字符串替换操作。

#include<stdio.h>
#define VAL 2.5
int main(){float res = VAL*2;printf("%.2f\n",res);
}

预编译操作完成之后,所有的VAL都会被替换为2.5,也就是

#include<stdio.h>
int main(){float res = 2.5*2;printf("%.2f\n",res);
}

我们可以通过下面的例子更好的理解宏定义

#include<stdio.h>
#define VAL 1+2
int main(){int res = VAL*2;printf("%d\n",res);
}

输出结果为5,不是6,为什么呢?因为替换之后变成了这样

#include<stdio.h>
int main(){int res = 1+2*2;printf("%d\n",res);
}
  1. 宏定义可嵌套;

  2. 末尾不用加分号;

  3. 可用#undef终止宏定义的作用域;

  4. 宏定义在编译之前进行,不做语法检查、不分配内存、不涉及数据类型;

  5. 宏定义只占用编译时间,不占用运行时间;

  6. 宏定义使源程序变长;

宏定义的使用场合:

  1. 后面会频繁用到的数组的大小;

  2. 宏替换后程序程序更整齐、可读性更好的场合;

宏函数

宏函数本质上还是字符串的替换,一般可以将一些简单的操作定义为宏函数,宏函数可以接受参数,并且可以返回数据。

#include<stdio.h>
#define MAX(a,b) ((a>b)? a:b)
int main(){int a=1,b=2;int res=MAX(a,b);printf("%d\n",res);
}

宏定义之闰年判断

解题思路:闰年的定义是可以被4整除同时却不能被100整除的年份,或者是可以被400整除的年份

注意事项:题目给定的函数名默认是LEAP_YEAR(y)

参考代码:

#include<stdio.h>#define  LEAP_YEAR(y) ((y%4==0&&y%100!=0)||y%400==0)//闰年的判断条件void main(){int y;scanf("%d",&y);                           if(LEAP_YEAR(y))//if的条件若为真,即条件为1,则输出L                                                        printf("L\n");else                                printf("N\n");//条件为假,输出N}

C语言开发必会 宏定义、宏函数相关推荐

  1. C语言中宏定义和函数的区别

    前言 在C语言中,对于一些常用或通用的代码段的封装可以有两种方式:函数和宏定义. 这篇博客就来带大家梳理一下对于这两种方式我们在使用时应该如何抉择,以及它们的区别和优缺点. 宏定义和函数的区别 从程序 ...

  2. C语言宏定义制作函数模板

    一.介绍 当做协议栈或者批量化函数的时候,内容框架是固定的,如果要写1000个10000个函数确实手敲比较麻烦,一种是用工具批量产生这些函数,另一种就是宏定义,这里给出宏定义解决的方法,利用宏定义制作 ...

  3. c++用宏定义和函数来求圆的面积,半径可为表达式

    本题是输入整数或表达式进入宏定义和函数来求面积的.若将输入的半径改成表达式则会因为宏定义与函数的不同,有所区别. 因为宏定义是直接替换,所以例如输入为确定的值时,宏定义和函数的编写可以没有区别,例如下 ...

  4. C语言中宏定义和函数的取舍

    要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定 ...

  5. C语言【宏定义与函数的区别】

    在代码开发过程中,有一些常用或者可以通用的功能或者代码段,实现这些功能,既可以写成函数,也可以封装成为宏定义.那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍. 先看宏 宏: #de ...

  6. c语言 宏定义 宏用法

    目录 #define  标识符  常量 1.#if系列用法 2.#ifdef用法 3.#ifndef用法 4.#error用法 #define  标识符  常量 C语言中,可以用 #define 定义 ...

  7. 理解OpenCV中的宏定义 CVAPI(函数返回类型)

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 读代码时看到语句 CVAPI(IplImage* ...

  8. 函数宏定义 与函数自定义

    为什么在C语言中要有函数宏定义这种形式呢?宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏 ...

  9. java中宏定义,宏定义的使用

    C中的宏分为两类,对象宏(object-like macro)和函数宏(function-like macro). 预定义宏: 1.预定义宏的行为是由编译器指定的. 2.前后双下杠的一般都是预定义. ...

最新文章

  1. 对指针变量取地址_C语言指针简介(amp;和*运算符)
  2. ad域帐号登录提示无法处理请求_微软Windows Server之AD域控制器迁移测试方案
  3. Codeforces Round #674 (Div. 3)
  4. php 查文件sha1 内存不足,SHA是否足以检查文件重复? (PHP中的sha1_file)
  5. 数据库 | OMIM (在线人类孟德尔遗传)数据库简介
  6. 初中数学抽象教学的案例_初中数学课堂片段教学案例分析
  7. WCF学习之旅—第三个示例之四(三十)
  8. Vue给单独页面添加背景色
  9. swift学习之元组
  10. 移动端上下拖动调整顺序效果_HTML5 移动端的上下左右滑动问题
  11. 大数据分析平台的核心价值
  12. dns代表计算机哪个术语,windows dns 术语解释
  13. 车机没有carlife可以自己下载吗_我可以忍受我的车上没有空调,但是我不能忍受我的车上没有CarPlay!...
  14. fft算法的c语言实现,快速傅立叶变换(FFT)算法(蝶形算法)的C/C++源代码(zz)
  15. 2021年高压电工考试报名及高压电工模拟试题
  16. tplink478虚拟服务器设置,tp-link路由器TL-R473如何设置,10台电脑设置局域网
  17. 《云计算与大数据》课程报告
  18. eNSP模拟下的vlanif配置实现(一个汇聚交换机,两个接入交换机)通过三层交换机实现vlan间的三层通信
  19. Shiro认证源码解析和工作原理
  20. 拉勾教育-求职技巧总结

热门文章

  1. 怎样赚钱?互联网赚钱才是草根最好的方式!
  2. Excel快速入门02
  3. 商汤 | 离线量化算法研究,从经典到原创
  4. 求细胞数量:一矩形阵列由数字 0 到 9 组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
  5. 第一篇 香橙派刷机和开发环境准备(Armbian版)
  6. Java自幂数计算及其算法改进
  7. 惠州学院计算机科学与技术录取分数线,惠州学院录取分数线2021是多少分(附历年录取分数线)...
  8. 28个Github上最火的机器学习开源项目
  9. 兼容IE8的文件下载,解决IE下载文本和图片直接打开问题
  10. iOS 仿系统指南针