C语言宏定义的使用

news2025/1/10 23:41:20

文章目录

  • 🍊自我介绍
  • 🍊宏定义
  • 🍊宏函数
  • 🍊嵌入式开发常用do...while(0)
  • 🍊字符串化运算符 ‘ # ’
  • 🍊不定参数宏


你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~


🍊自我介绍

  Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群一名“创始团队·嘉宾” ,现在我来为大家介绍一下有关嵌入式方面的内容。在进入介绍之前,可能有一些小伙伴不了解易编程·终身成长社群;想要进一步了解社群的小伙伴可以点击下方链接自行跳转至关于社群的介绍:

易编程·终身成长社群介绍 :
https://blog.csdn.net/weixin_74300052?spm=1011.2266.3001.5343
在这里插入图片描述


🍊宏定义

简介

格式:
#define 宏名 常量
功能:宏名代替常量,提高代码可读性

示例用法:

#define MAX 100
说明:
(1)表示MAX这个符号标识的值是1002)编译器会将宏替换成宏后面的内容

🍊宏函数

#define 宏函数名(参数1) 表达式
特点:宏都是原样替换

示例用法:

#include <stdio.h>

#define M 10
#define CALC(x) (x * x)
int main()
{
	printf(""Result = %d\n",CALC(M + M));//120  (M + M * M + M) = 120
	return 0;
}

🍊嵌入式开发常用do…while(0)

//do...while(0)好处:代码只执行一次,可以增加一些扩展使用
#include <stdio.h>
// \是换行
#define TEST() do{\print_demo_first;\print_demo_second();\}while(0)
pritn_demo_first()
{
	printf("demo_first\n");
}

pritn_demo_second()
{
	printf("demo_second\n");
}

pritn_demo_third()
{
	printf("demo_third\n");
}

int main()
{
	int n = 0;
	printf("please input a data:");
	scanf("%d",&n);
	
	if(n % 2 == 0)
		TEST();	 //do{pritn_demo_first();pritn_demo_second()}while(0);
	else
		print_demo_third();

}

🍊字符串化运算符 ‘ # ’

#:我们常称为字符串化运算符,因为它会把宏调用时的实参转化为字符串
示例:
#define FUN(x) #x

int t = Fun(NUM)
printf("%d\n",t);

输出结果:

NUM

🍊不定参数宏

C99标准中规定允许用户定义有省略号的宏,省略号必须放在参数列表的后面,以表示可选参数。
你可以用可选参数来调用这类宏。在代码中用...代表。它们被保存在__VA_ARGS__中.

__VA_ARGS__:用于在宏替换部分中,表示可变参数列表

代码示例:

#include <stdio.h>

#define LOG(...) printf(__VA_ARGS__)

#define LOGSTR(fm,...) printf(fm,__VA__ARGS__)
int main()
{
	LOG("This Time is %d o'clock\n",9);//This Time is %d o'clock和9都是可变参数
	LOG("This Time is %d:%d:%d\n",18,21,23);
	LOGSTR("data = %d%s\n",100,RMB);//fm是data = %d%s\n; 100和RMB是可变参数
	return 0;

}

输出结果:

This Time is 9 o'clock
This Time is 18:21:23
data = 100RMB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL报错注入之floor

目录 1.简述 2.关键函数说明 1.rand函数 2.floor&#xff08;rand&#xff08;0&#xff09;*2&#xff09;函数 3.group by 函数 4.count&#xff08;*&#xff09;函数 3.报错分析 4.报错流程 4.1寻找注入点 4.2爆数据库名 4.3爆表名 4.4爆字段名 4.5查询数据 1.…

32、Python之面向对象:对象的表示,再论Python是dict包括语法糖

引言 在前面介绍Python容器的时候&#xff0c;我们曾经用过这种夸张的表述&#xff0c;“Python就是包裹在一堆语法糖中的字典”。虽然夸张&#xff0c;其实更多的是为了突出Python中dict的强大之处。今天这篇文章&#xff0c;打算看下Python中类对象、实例对象的表示及内存管理…

甄选范文“论负载均衡技术在Web系统中的应用”软考高级论文系统架构设计师论文

论文真题 负载均衡技术是提升Web系统性能的重要方法。利用负载均衡技术, 可将负载(工作任务) 进行平衡、分摊到多个操作单元上执行, 从而协同完成工作任务, 达到提升Web系统性能的目的。 请围绕“负载均衡技术在Web系统中的应用”论题, 依次从以下三个方面进行论述。 1.…

自动化测试 — selenium + Java

什么是自动化测试 将人为驱动的测试行为转化为机器执行的过程。 自动化测试包括UI 自动化&#xff0c;接口自动化&#xff0c;单元测试自动化。按照这个金字塔模型来进行自动化测试规划&#xff0c;可以产生最佳的自贡话测试产出投入比&#xff08;ROI &#xff09;&#xff0c…

智能氮气柜如何为存储应用提供稳定和安全的环境?

智能氮气柜在保持内部环境的严格控制下&#xff0c;如何为各类高要求的存储应用提供一个稳定和安全的环境&#xff1f; 智能氮气柜内部安装高精度温湿度传感器&#xff0c;持续监测内部环境状况。通过外部连接的氮气供应源&#xff0c;向柜内注入高纯度氮气&#xff0c;当检测到…

k8s—ingress应用

一、ingress和ingress-controller ingress对象&#xff1a; 指的是k8s中的⼀个api对象/资源对象&#xff0c;⼀般⽤yaml配置。作⽤是定义请求如何转发到service的规则&#xff0c;可以理解为配置模板。 ingress-controller&#xff1a; 具体实现反向代理及负载均衡的程序&…

IO-Link通信笔记(十七)——可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈与接口代码生成和监控上位机与便携式通信主站

一、可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈 图形化界面与驱动代码库生成功能&#xff0c;是现如今几大半导体芯片供应商选择向广大开发人员推荐的主流开发方式&#xff0c;例如意法的cube-mx。开发人员可以通过这些软件针对所使用芯片的相关外设资源&#xf…

缺失值处理方法:代数/统计/机器学习算法补全数据(附Python-sklearn代码精美可视化绘图)

注&#xff1a;本期的删除或插补方法主要针对连续数据&#xff0c;时间序列数据的插补在后续关于时间序列的博客中讲明。参考鸢尾花丛书&#xff0c;链接如下&#xff1a; 参考书籍及源代码链接https://github.com/Visualize-ML 博客是选出自己感觉用的到的精炼部分加自己的理…

春秋云境 | 文件上传 | CVE-2022-30887

目录 靶标介绍 开启靶场 上传一句话木马 蚁剑连接 找到 flag 靶标介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0…

eclipse无法使用jdk1.6编译老项目

主要修改两个地方的配置&#xff1a; 1、eclipse中配置的maven版本不能过高&#xff0c;亲测3.2.5版本是好使的。 2、修改eclipse安装目录下的eclipse.ini文件&#xff0c;将其中的-Dosgi.requiredJavaVersion更改为1.6即可&#xff0c;我得默认是1.7 最后附上maven安装包&…

AGV一体式ARM智能控制主机如何替代传统PLC、工控机等方案

工业自动化的不断发展&#xff0c;AGV&#xff08;自动导引车&#xff09;作为一种重要的物流搬运设备&#xff0c;在各个领域得到了广泛的应用。而 AGV 的控制主机是其核心部件之一&#xff0c;直接影响着 AGV 的性能和稳定性。传统的 AGV 控制主机通常采用 x86 工控机交换机i…

【密码学】密码协议的分类:②认证协议

密码协议的分类有很多种方式&#xff0c;这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类&#xff1a;认证协议、密钥建立协议、认证密钥建立协议。 一、认证协议是什么&#xff1f; 认证协议都在认证些什么东西呢&#xff1f;认证一般要认证三个东西&#x…

防止老年痴呆的小学题

直角三角形的周长为16,斜边长为7,求三角形的面积(不使用勾股定理) 答案为(9*9-7*7)/4

aria2下载器在windows端的使用

一、下载aria2 aria2aria2 is a lightweight multi-protocol & multi-source command-linedownload utility. It supports HTTP/HTTPS, FTP, SFTP,BitTorrent and Metalink. …https://aria2.github.io/打开链接&#xff0c;点击要下载的版本&#xff0c;注意windows版本跟…

k8s持久化存储PV和PVC

一、PV和PVC 1.PersistentVolume (PV) PersistentVolume (PV) 是外部存储系统中的⼀块存储空间&#xff0c;由管理员创建和维护。与 Volume⼀样&#xff0c; PV 具有持久性&#xff0c;⽣命周期独⽴于 Pod&#xff1b; 2.PersistentVolumeClaim (PVC) PersistentVolumeClaim…

MySQL的三大关键日志:Bin Log、Redo Log与Undo Log

MySQL的三大关键日志&#xff1a;Bin Log、Redo Log与Undo Log 1. Bin Log&#xff08;二进制日志&#xff09;2. Redo Log&#xff08;重做日志&#xff09;3. Undo Log&#xff08;回滚日志&#xff09; ) &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷…

8.6 Day14 匿名用户访问ftp位置

vsftpd的端口号&#xff1a;tcp 20、21 vsftpd的配置文件&#xff1a;/etc/vsftpd/vsftpd.conf LInux系统防火墙默认不允许开启20、21端口访问 使用不同用户访问FTP 1.使用匿名用户访问FTP 匿名用户登录时&#xff0c;用户名为ftp&#xff0c;没有密码 测试匿名用户文件上传…

20240806---特征选择与稀疏学习笔记---pptp61-p92---奇异值分解/压缩感知、字典学习

一.奇异值分解 2.要进行特征分解&#xff0c;则矩阵A为方阵&#xff0c;如果矩阵 &#x1d434;A 不是方阵&#xff08;即行数和列数不同&#xff09;&#xff0c;我们仍然可以对其进行分解&#xff0c;这就是奇异值分解&#xff08;SVD&#xff09;的强大之处。 二.压缩感知 …

力扣面试经典算法150题:移除元素

移除元素 今日的题目依旧是力扣面试经典算法150题中数组相关的题目&#xff1a;移除元素 题目链接&#xff1a;https://leetcode.cn/problems/remove-element/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个排序数组 nums 和一个值 val&a…

cpu问题排查——mpstat

mpstat是sysstat包中用于linux下排查、监控cpu的一个工具。可从该工具体现出程序中断情况、cpu负载情况等。 用法 mpstat [ options ] [ <interval> [ <count> ] ] 命令参数 -P { <cpu_list> | ALL } : ALL表示所有cpu的平均损耗信息&#xff0c;<cpu_…