宏常量概念:

用#define指令,指定用一个符号名称代表一个常量;也称为符号常量。

例如:#define PI 3.1415 //注意行末没有分号
经过上述的指定后,本文件中从此行开始所有的PI都代表3.1415。在对程序进行编译前,预处理器先对PI进行宏展开,把所有的PI都替换成3.1415。这种用一个符号代表一个常量的,称为宏常量;

使用宏常量的好处:

  1. 含义清楚;看程序时从PI就可大致知道他代表圆周率。故应尽量使用“见名知意”的变量名或符号常量;
  2. 在需要修改程序中多处用到的同一个常量时,能做到一改全改;

注意事项:要区分宏常量和变量,不要把宏常量误认为变量。符号常量不占用内存,只是一个临时符号,代表一个值,在预处理后这个符号就不存在了,故不能对符号常量解析值。为和变量名区别开,习惯上符号常量用大写字母表示;

#include<stdio.h>
#define PI 3.1415int main()
{int a = PI;printf("%f\n", a);return 0;
}

宏函数概念:

  • 宏函数和宏常量都是利用#define定义出来的内容
  • 在项目中,经常把一些短小而又频繁使用的函数写成宏函数
  • 这是由于宏函数没有普通函数参数压栈、跳转、出栈返回等时间上的开销,可以调高程序的效率。

注意事项: 宏函数通常需要加括号,保证运算的完整;宏函数不是真正的函数,是一种替换机制,所以操作符的优先级会影响宏的求值, 应尽量使用括号明确优先级

#define MYADD(x,y) ((x) + (y)) //宏函数
//普通函数下的a、b都要进行入栈,函数执行后出栈
int myAdd(int a ,int b)//普通函数
{return a + b;
}
//宏函数 在一定的场景下 要比普通的函数效率高,把频繁使用并且短小的函数 可以写成宏函数
//宏函数在编译阶段就替换源码  而没有普通函数入栈出栈的开销,以空间换时间
void test()
{int a = 10;int b = 20;printf("a + b = %d\n", MYADD(a, b)); // 直接替换((a) + (b))
}

总结:将使用频繁且短小的函数可以封装为宏函数,以空间换时间。

#define定义宏常量和宏函数相关推荐

  1. C语言初阶:define定义的常量和宏,关于指针的详细讲解,初步认识结构体的使用

    目录: 1.define定义常量和宏 2.指针 3.初始结构体 学习内容: 1.define是一个预处理指令 //1.作用一:定义标识符常量 //2.作用二:定宏 define定义的宏是用来完成替换的 ...

  2. 【C语言】#define定义的标识符和宏

    目录 1.#define定义标识符 语法 2.#define定义宏 #define替换的规则 #与## #的用法: ##的用法: 宏的缺点

  3. php----------const 定义的常量和define()定义的常量的区别?

    用法一:const用于类成员变量,一经定义不可修改,define用于全局常量,不可用于类成员变量的定义,const可在类中使用也可以在类外面使用,define不能. 定义:const 常量名=值; 没 ...

  4. PHP中define定义的常量如何在smarty模板调用

    为什么80%的码农都做不了架构师?>>>    先用php定义目录路径 define('CSS_PATH',PUBLIC_PATH.'css/'); define('JS_PATH' ...

  5. define定义的函数如何引用_「C与指针心得」25.预处理器-宏函数

    感谢您的阅读与点赞!欢迎关注:「大猫玩程序」,查看C语言系列文章 上一节讲了一些系统的预定义宏,这一节来讲一讲 宏定义.宏函数. 预处理常量 define: 预处理器指令从#开始,到最后第一个换行符为 ...

  6. 带你学C带你飞 | printf函数 | 变量 | 常量和宏定义 | 数据类型 | 取值范围 | 字符串 | 运算符

    文章目录 一.printf函数 1.printf函数 2.printf函数课后作业 二.变量 1.变量 2.变量课后作业 三.常量和宏定义 1.常量和宏定义 2.常量和宏定义的课后作业 四.数据类型 ...

  7. [C语言]static关键字--#define 定义常量和宏--初识指针--初识C语言(四)

    文章目录 前言 一,static关键字 二,#define 定义常量和宏 三,初识指针 总结 前言 本节主要记录初识C语言第四节内容. 内容包括:static关键字------#define 定义常量 ...

  8. C语言——初识C语言(define定义常量和宏,指针,结构体)

    1.1define定义常量和宏 define    定义符号(定义常量) //define 定义标识符常量 #define MAX 1000 define    定义宏(宏是有参数的,参数用来替换) ...

  9. C语言——关键字,define定义宏,指针,结构体

    常见关键字 auto break case char continue const default do double else enum extern float for goto if int l ...

最新文章

  1. 颜色空间模型(HSV\LAB\RGB\CMYK)
  2. Python将DataFrame的某一列作为index
  3. 【控制】《最优控制理论与系统》-胡寿松老师-第5章-线性最优状态调节器
  4. 图解如何在DC上添加自定义属性类
  5. c++用一级运算比较大小_Python运算符
  6. python集合类型运算符_Python 数据类型和运算符
  7. k8s学习: 创建 mysql 任务
  8. 【Python笔记】Python/C++解决约瑟夫环问题
  9. 2021-08-27
  10. wifi数据包解析_WiFi通讯协议详解
  11. Tango学习笔记(1)
  12. C语言实验—— 数值统计
  13. 聊聊FPGA学习与开发板的那些事儿
  14. 做生意值得一看的几部电视剧
  15. 彻底搞懂MySQL的索引
  16. 最小生成树 算法思想及模板代码
  17. 【第五周】新蜂团体贡献分
  18. 黑白棋,又叫翻转棋(Reversi)、苹果棋或奥赛罗棋(Othello)。棋盘共有8行8列共64格。开局时,棋盘正中央的4格先置放黑白相隔的4枚棋子。双方轮流落子,只要落子和棋盘上任一枚己方的棋子
  19. 我用Python写了一个小游戏
  20. 生成静态链接库和动态链接库

热门文章

  1. oracle列求平均
  2. 警告“未引用的形参/局部变量”的消除方法
  3. 【MacOS】Mac下的gVim - MacVim
  4. 蓝桥杯python试题 基础练习 Fibonacci数列
  5. Java中关于空格遇到的一些问题
  6. 8个超好用的免费工具/软件/网站
  7. 二叉树中序遍历非递归算法实现详解
  8. visual studio 2013和visual studio 2015下载链接 老版本VS
  9. 常年不卷,按时下班,工作能力强,同事求助知无不言,不扯皮,不拉帮结派,这样的职场清流竟然被裁掉了!...
  10. windows保护无法启动修复服务器,如何解决win10“Windows资源保护无法启动修复服务”错误 | MOS86...