首页 > 其他分享 >C语言 ——— #define 定义宏

C语言 ——— #define 定义宏

时间:2024-09-07 13:51:37浏览次数:11  
标签:宏中 演示 定义 int 代码 C语言 括号 define

目录

何为宏

宏的声明及其使用方式

宏中的括号是否多余


何为宏

#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称宏


宏的声明及其使用方式

声明代码演示:

#define  MAX(x,y)  ((x)>(y)?(x):(y))

使用代码演示:

int a = 3;
int b = 5;

int max = MAX(a, b);

代码解析:

MAX(a, b) 在程序预处理阶段会被替换成:

int max = ((a)>(b)?(a):(b));

代码验证:


宏中的括号是否多余

提问:

在宏中的每个变量都加上了括号,加上括号的意义在哪,是否能去掉括号呢?

代码演示:

// 不加括号
#define  MUL(x,y)  x * y 

// 加上括号
#define  MUL(x,y)  ((x) * (y))

使用代码演示:

int a = 3;
int b = 5;

int sum = MUL(a + b, b - a);

代码解析:

a + b 的和 于 b - a 的差 做乘法,a + b = 8 ,b - a = 2

预期结果:8 * 2 = 16

不加括号代码验证:

加上括号代码验证:

结论:

可以从代码验证中看出,不加括号的结果和预期的结果大相径庭

出现这一问题的原因在于两点:

  1. 宏是完完全全的替换,替换前并不会进行计算,所以是直接将 a + b 和 b - a 替换到宏中,这样就会出现优先级的先后问题
  2. 宏中的变量不一定是变量,有可能是表达式,有可能是函数等等

所以在声明宏的时候,最好加上必要的括号,以免出现优先级问题 

标签:宏中,演示,定义,int,代码,C语言,括号,define
From: https://blog.csdn.net/weixin_55341642/article/details/141869946

相关文章

  • 【保姆级教程】使用 PyTorch 自定义卷积神经网络(CNN) 实现图像分类、训练验证、预测全
    《博主简介》小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。......
  • SQL 自定义函数 生成网卡地址,MES开发中经常会用到的
    SQL自定义函数生成网卡地址,MES开发中经常会用到的ALTERFunction[dbo].[Fun_ReleaseMACadd]( @CurrentSeqNovarchar(6))Returnsvarchar(18)-------------------------------------------------------------------------------------------------As--------------......
  • 重生之霸道C语言爱上我之走入指针(3)
    根据前两篇与指针的初步接触后,我们已经了解到了指针里面最基本的知识,而接下来的文章,将会更注重于指针的深入理解和运用。1.数组名的理解1.1arr,即一个数组的数组名的理解在上一篇文章1.1里面的代码中,我们在用指针访问数组内容的时候,有这样的代码:intarr[10]={1,2,3,4,5,6......
  • 条款02: 尽量以const,enum,inline 替换 #define
    宏实现1.宏定义有可能从未被编译器看到,找不到宏定义2.宏有可能存在多份#defineASPECT_RATIO1.6531.宏实现函数,必须为宏中所有实参加上(),即使加上也会有被多次调用template<typenameT>inlinevoidprint(Tdata){ std::cout<<data<<std::endl;}#define......
  • C语言常量和字面量
    目录引言1.字面量1.1字符字面量1.2整型字面量1.3浮点字面量2.常量2.1使用预处理器指令#define定义常量2.1.1语法格式2.1.2使用举例2.2使用const关键字定义常量2.3使用#define和const定义常量的区别引言        字面量是直接在代码中......
  • 全国计算机二级考试C语言篇3——选择题
    C语言部分——C语言概述1.程序模块化的优点程序模块化的优点在于它可以使程序的开发、维护和复用变得更简单。下面是一些主要的优点:降低复杂度:模块化可以将复杂的问题分解成更小的、更易管理的部分。可维护性:模块化使得代码更易于维护,因为修改一个模块的影响被限制在该......
  • c语言内存函数
    今天来学习C语言中的内存函数目录1.memcpy代码形式示例运行结果2.memmove代码形式示例运行结果3.memset代码形式示例运行结果4.memcmp形式示例运行结果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b7d8d59577b248deaa7b869d014d8b4f.png#pic_center)5......
  • 脑机接口定义及相关概念
    1什么是脑机接口脑机接口(Brain-ComputerInterface,简称,BCI)是指一种系统或设备,它通过解码大脑的电生理信号来与外部计算机或设备进行直接的通讯。BCI的目的是在不依赖身体运动的情况下实现大脑与计算机之间的信息交换。2相关概念2.1脑电图(EEG)最常用的脑机接......
  • 学习笔记|鹏哥C语言——关键字
    一、 关键字typedeftypedef顾名思义是类型定义,这里应该理解为类型重命名。比如:二、 关键字static在C语言中:static是用来修饰变量和函数的1.修饰局部变量-称为静态局部变量2.修饰全局变量-称为静态全局变量3.修饰函数-称为静态函数三、 修饰局部变量......
  • E31.【C语言】练习:指针运算习题集(上)
    Exercise1求下列代码的运行结果#include<stdio.h>intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d",*(ptr-1)); return0;}答案速查:分析:Exercise2 求下列代码的运行结果//在x86环境下//假设结构体的大小是20个字节......