宏#define的三种基本定义方式:固定值,表达式,运算符。

简介: 宏#define的三种基本定义方式:固定值,表达式,运算符。

#define:

       define是C语言中的预处理命令,预处理命令以“#”开头,比如我们经常写的代码#include<stdio.h>也是预处理命令。

       #define用于宏定义,作用是方便程序段的定义和修改,可以将一个变量强制定义为你想要的值,它能提高源代码的可读性,为编程提供方便。

       宏定义又分为无参宏定义(不带参数)和带参宏定义(带有参数)。

预处理是什么?

预处理就是指计算机在进行编译运行之前做的工作。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。

无参宏定义:固定值,表达式

固定值:(直接上代码)

格式:#define 标识符 变量

#include<stdio.h>
#define SUM 3.1415926  //宏定义,相当于SUM=3.1415926
int main()
{
  int r=3;
  float face;
  face=r*r*SUM;   //直接引用SUM
  printf("圆的面积为:%.2f",face); 
  return 0; 
}


注意:中间为空格,最后不要加“ ; ”,加了分号连分号一起替换。

如下面这段代码是可以实现的:

#include<stdio.h>
#define SUM 3.1415926; //等价于SUM=3.1415926;
int main()
{
  int r=3;
  float face;
  face=r*r*SUM  //分号在宏定义处
  printf("圆的面积为:%.2f",face); 
  return 0; 
}

注:如果要在这样写,变量名必须写在一个语句的最后。如face=r*r*SUM  ,而face=SUM*r*r是错误的,所以注意宏定义后面最好不要去加分号。


运算符:

格式:#define  标识符  运算符号

#include<stdio.h>
#define SUM 3.1415926
#define C *  //C等价于*
int main()
{
  int r=3;
  float face;
  face=r C r C SUM; //等价于face=r * r * SUM
  printf("圆的面积为:%.2f",face);
  return 0; 
}

这个太简单了,来点有难度的


带参宏定义:表达式

格式:#define  标识符  表达式

如:#define   MAY(a,b)   a*b+a+b

#include<stdio.h>
#define MAY(a,b) a*b+a+b  //MAY=a*b+a+b
int main()
{
  int x=2,y=3,face;
  face=MAY(x,y);  //等价于x*y+x+y
  printf("运算结果为:%d",face); 
  return 0; 
}

再举个列子,如:#define MAY(a,b)  a>b?a:b

#include<stdio.h>
#define MAY(a,b) a>b?a:b 
int main()
{
  int x=2,y=3,face;
  face=MAY(x,y);
  printf("运算结果为:%d",face); 
  return 0; 
}


如果在比较长的代码中,不需要这个宏定义了,怎么结束它呢?

就这样引出了终止符#undef

格式:#undef  标识符

undef后面的标识符表示你所要终止的宏。程序一旦运行到它,之后的这个宏将不再起作用,再使用,编译将会报错。


相关文章
|
自然语言处理 搜索推荐 程序员
【Python】如何使用pip,安装第三方库和生成二维码、操作Excel
【Python】如何使用pip,安装第三方库和生成二维码、操作Excel
245 0
|
12月前
|
机器学习/深度学习 生物认证 语音技术
声纹识别入门:原理与基础知识
【10月更文挑战第16天】声纹识别(Voice Biometrics)是生物特征识别技术的一种,它通过分析个人的语音特征来验证身份。与指纹识别或面部识别相比,声纹识别具有非接触性、易于远程操作等特点,因此在电话银行、客户服务、智能家居等领域得到了广泛应用。
2157 0
深入理解Debug断点调试技巧
深入理解Debug断点调试技巧
963 1
|
Python
使用pip安装第三方库的方法。
使用pip安装第三方库的方法。
642 1
|
移动开发 JavaScript 前端开发
vue简单的图片预览
vue简单的图片预览
245 0
|
编译器 C语言
C语言全局变量与局部变量详解
C语言全局变量与局部变量详解
581 0
C语言全局变量与局部变量详解
|
小程序 测试技术 定位技术
微信小程序景区的制作思路
微信小程序景区的制作思路
|
存储 传感器 编解码
Qt开发笔记之编码x264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件
Qt开发笔记之编码x264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件
Qt开发笔记之编码x264码流并封装mp4(三):Qt使用x264库对.yuv文件编码为.h264文件
|
传感器 Ubuntu 测试技术
ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)
测试第三课,ESP32-C3的串口通信测试 老样子,使用Enocean无线模块和ESP32-C3进行串口通信。
1110 0
ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)