c++ define 用法

PS:凡是以 # 开头的均为预处理指令,预处理又叫预编译。预编译不是编译,而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。

宏定义

宏定义分为有参和午餐,一般而言无参更多用constexpr代替

  1. 无参
#define  标识符  字符串// example
#define Tang Tang Panfan
  1. 有参
 #define  宏名(形参表)  字符串// example
#define add(x+y) (x+y)

特殊操作符

define 中的特殊操作符有\,#,##,#@,… and __VA_ARGS__

  1. **
    首先明白,宏定义一定是一行,这样就造成了可读性差,想要多行,可以
    宏多行定义
#define PRINT               \
{                           \printf("define 1\n");   \printf("define 2\n");   \printf("define 3\n");   \
}

PS:最后一行不能加****,这是因为该符号表示将下一行链接起来;每一行最后不能加空格,否则会转义
2. #
把语言符号转化为字符串,即字符串化
直接转为字符串

#define PRINT(x) printf(#x "is val: %d\n", x)
int a = 1;
PRINT(a)
// a is val: 1#define SUM(a,b) printf(#a " + "#b" = %d\n",((a) + (b)))    //宏定义,运用 # 运算符
SUM(1 + 2, 3 + 4);                                          //宏调用
//输出结果:1 + 2 + 3 + 4 = 10
  1. ##
    用于字符连接
#define EPS(n) (1e##-##n)
#define EPS(n) (1e-n) // 报错
  1. #@
    字符化操作符
    上面的**#**是字符串化^ _ ^

  2. __VA_ARGS__ 是一个可变参数的宏
    实现思想就是宏定义中参数列表的最后一个参数为省略号(也就是三个点)。这样预定义宏__VA_ARGS__就可以被用在替换部分中,替换省略号所代表的字符串
#define PRINT(...) printf(__VA_ARGS__)
int main()
{int wt=1,sp=2;PRINT("hello\n");//输出:helloPRINT("weight = %d, shipping = %d",wt,sp);//输出:weight = 1, shipping = 2return 0;
}

取消宏

//定义宏
#define [MacroName] [MacroValue]
//取消宏
#undef [MacroName]

防止文件冲突

#ifndef __XXX__
#define __XXX__
…
文件内容
…
#endif

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

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

相关文章

代币中的decimal精度代表了什么

精度的意义在于允许发送小数的代币。举例,一个CAT代币合约的精度为6。那么 你拥有1个CAT就意味着合约中的balance 1 * 10^6 , 转账 0.1CAT出去的话,就需要输入 0.1*10^6 10^5。 也就时在涉及代币时,查询到的余额、转账的代币数量 都和 代币…

Sqoop入门指南:安装和配置

Sqoop是一个强大的工具,用于在Hadoop和关系型数据库之间高效传输数据。在本篇文章中,将深入探讨如何安装和配置Sqoop,以及提供详细的示例代码。 安装Java和Hadoop 在开始安装Sqoop之前,首先确保已经成功安装了Java和Hadoop。Sqo…

视频转音频小小代码

前言 特定的场景下,人的需求往往容易变得奇特,比方说,mp4的文件,有时候我只想听声音,而不需要看内容,这个时候把它转换成acc更加节省存储空间,变成了音频带上耳机听就可以了。 那么视频怎么转音…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑩

单元测试 一、任务要求 题目1:根据下列流程图编写程序实现相应处理,程序根据两个输入参数iRecordNum和IType计算x的值并返回。编写程序代码,使用JUnit框架编写测试类对编写的程序代码进行测试,测试类中设计最少的测试数据满足基路…

yolov8n 瑞芯微RKNN和地平线Horizon芯片仿真测试部署,部署工程难度小、模型推理速度快

特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。 模型和完整仿真测试代码,放在github上参考链接 模型和代码。 因为之前写了几篇yolov8模型部署的博文,存在两个问题&…

全网首发!Yolov8_obb旋转框检测(DOTA1.0数据集)

一、YOLOv8环境搭建 (1)Pytorch的安装 如果你的环境没有部署请参考本人文章:NLP笔记(2)——PyTorch的详细安装_安装torchnlp-CSDN博客 (2)下载最新的Yolov8-obb代码: https://git…

909. 蛇梯棋(图的BFS)

使用广度优先搜索来遍历从1到n*n的可能的路径。 这道题可以看作一个有向图,每个值为x的节点指向x1点节点,在蛇桥处,是从x指向y 注意这里的x、x1、y都是值,可以根据值计算出对应的行列值,计算规则: 假设值…

Redis相关知识点

1.什么是Redis Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库 特征: 1.数据间没有必然的关联关系 2.内部采用单线程机制进行工作 3.高性能,官方提供测试数据,50个…

【修图】AI修图工具

人脸替换 免费的人脸替换工具: Face Swap: https://vmodel.ai/face-swap 支持单人换脸、多人换脸 AI消除 SnapEdit https://snapedit.app/remove-object 不付费的话只能下载清晰度较低的版本 但我试了几个在线的AI消除工具,SnapEdit算是…

回溯算法part06 算法

回溯算法part06 算法 今日任务&#xff1a; ● 51. N皇后 ● 37. 解数独 1.leetcode 51. N皇后 https://leetcode.cn/problems/n-queens/description/ class Solution {//存储结果List<List<String>> resultnew ArrayList<>();public List<List<St…

详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

目录 前言1. JsonFormat注解2. DateTimeFormat注解3. Demo3.1 无注解3.2 有注解 4. 拓展 前言 下文中涉及MybatisPlus的逻辑删除的知识&#xff0c;可看我之前这篇文章&#xff1a;详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章&#xff1…

MySQL、Oracle、PostgreSQL 数据库备份用的 Shell 脚本

文章目录 一、概要二、MySQL 数据库备份与还原异地备份脚本2.1 MySQL 数据库异地备份脚本2.2 MySQL 数据库的恢复 三、Oracle 数据库备份与还原脚本3.1 Oracle 数据库异地备份脚本3.2 Oracle 数据库的恢复 四、PostgreSQL 数据库异地备份与还原脚本4.1 PostgreSQL 数据库备份脚…

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中&#xff0c;污水处理设备是不可或缺的环节。那么&#xff0c;生活自来水厂的污水处理设备都有哪些呢&#xff1f;本文将为您详细介绍。 首先&#xff0c;生活自来水厂的污水处理设备主要包括预处理设备…

第11章 GUI Page489~494 步骤三十 保存画板文件

为“保存”菜单项 MenuItemFileSave挂接事件响应函数&#xff1a; 实际运行时&#xff0c;现版TrySaveFile()函数有点儿傻&#xff0c;点击保存菜单&#xff0c;还会弹出对话框&#xff0c;问我们“要不要保存” 修改TrySaveFile()函数 函数声明修改为&#xff1a; 函数实现修…

药品不良反应智能监测系统,java药品不良反应(ADR)智能监测系统源码,基于SpringBoot+Vue+MySQL技术开发

java药品不良反应智能监测系统 系统概述&#xff1a; 基于AI技术和深度学习模型&#xff0c;系统构建ADR智能识别模型&#xff0c;实现病程记录分析&#xff0c;提取病程记录实体&#xff0c;并完成语义关系的分类识别。一方面可以根据医务人员设置的监测任务或主题&#xff0c…

Open CV 图像处理基础:(六)在Java中使用 Open CV进行图片翻转和图片旋转

在Java中使用 Open CV进行图片翻转和图片旋转 目录 在Java中使用 Open CV进行图片翻转和图片旋转前言图片翻转函数代码示例其它翻转方向垂直翻转两轴翻转 图片旋转函数代码示例 Open CV 专栏导航 前言 在Java中使用OpenCV进行图片翻转和旋转是一种基本的图像处理技术&#xff0…

管理篇 - 24到28

学习目标&#xff1a; 为了更轻松的工作 学习内容&#xff1a; 新手管理最常犯的错&#xff1a;太把自己当回事儿&#xff01;当管理比自己干活还累&#xff1f;升职加薪后他真香了&#xff01;管理误区&#xff1a;要不要和下属做朋友&#xff1f;很多人都只理解了第一层&…

MySQL面试题 | 02.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

vim基本操作命令

一、vi简介 vi是“Visual interface”的简称&#xff0c;它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作&#xff0c;而且用户可以根据自己的需要对其进行定制。Vi不是一个排版程序&#xff0c;它不象Word或WPS那样可以…

商城小程序(8.购物车页面)

目录 一、商品列表区域1、渲染购物车商品列表的标题区域2、渲染商品列表区域的基本结构3、为my-goods组件封装radio勾选状态4、为my-goods组件封装radio-change事件5、修改购物车中商品的选择状态6、为my-goods组件封装NumberBox7、为my-goods封装num-change事件8、修改购物车商…