news 2026/6/10 18:07:16

C++ 宏定义相关的案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 宏定义相关的案例

这段C++代码演示了宏定义的高级用法,实现了一个计算向量元素极差的程序。通过宏定义了字符串转换(toStr)、输入简化(io)、比较函数生成(FUNCTION)、常量值(INF)和循环结构(foreach)。程序读取n个整数后,使用宏生成的minimum和maximum函数找出极值,最后输出"Result = <极差>"。代码展示了宏如何创建语法糖来简化代码,但也体现了宏可能带来的复杂性。例如输入"4\n1 2 3 4"会输出"Result =

/* 在此处输入宏指令 */#definetoStr(x)#x#defineio(v)cin>>v#defineFUNCTION(name,op)voidname(int&a,intb){if(b op a)a=b;}#defineINF1000000000#defineforeach(v,i)for(inti=0;i<v.size();i++)#include<iostream>#include<vector>usingnamespacestd;#if!defined toStr||!defined io||!defined FUNCTION||!defined INF#errorMissing preprocessor definitions#endifFUNCTION(minimum,<)FUNCTION(maximum,>)intmain(){intn;cin>>n;vector<int>v(n);foreach(v,i){io(v)[i];}intmn=INF;intmx=-INF;foreach(v,i){minimum(mn,v[i]);maximum(mx,v[i]);}intans=mx-mn;cout<<toStr(Result=)<<' '<<ans;return0;}

这段代码实现了一个计算向量中最大值与最小值之差的功能,并演示了宏定义的各种用法。具体功能如下:

主要功能:

  1. 读取一个整数n,表示向量的大小
  2. 读取n个整数到向量v
  3. 找出向量中的最大值mx和最小值mn
  4. 计算最大值与最小值的差
  5. 输出格式为:“Result = <差值>”

宏定义的具体作用:

  1. #define toStr(x) #x

    • 字符串化操作符,将参数转换为字符串字面量
    • toStr(Result =)会扩展为"Result ="
  2. #define io(v) cin >> v

    • 简化输入操作
    • io(v)[i]扩展为cin >> v[i]
  3. #define FUNCTION(name, op)

    voidname(int&a,intb){if(b op a)a=b;}
    • 创建比较函数宏
    • FUNCTION(minimum, <)生成:
      voidminimum(int&a,intb){if(b<a)a=b;}
    • FUNCTION(maximum, >)生成:
      voidmaximum(int&a,intb){if(b>a)a=b;}
  4. #define INF 1000000000

    • 定义一个大数作为初始值
  5. #define foreach(v, i)

    for(inti=0;i<v.size();i++)
    • 创建一个类似 foreach 的循环结构

示例运行:

输入:

4 1 2 3 4

输出:

Result = 3

解释:4 - 1 = 3

这段代码展示了如何在 C++ 中使用宏来创建自定义的语法糖,使代码更简洁、更具表达力,但也显示了宏可能带来的复杂性和潜在风险(如运算符优先级问题)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:22:52

RISC精简指令集实现:核心要点与硬件支撑

从指令到流水线&#xff1a;深入理解 RISC 架构的工程实现你有没有想过&#xff0c;为什么手机芯片能用很小的功耗跑得飞快&#xff1f;为什么越来越多的服务器开始采用 ARM 或 RISC-V 处理器&#xff1f;这一切的背后&#xff0c;其实都绕不开一个核心设计理念——RISC&#x…

作者头像 李华
网站建设 2026/6/10 14:24:46

LVGL与STM32触摸屏校准集成的通俗解释

手把手教你搞定LVGLSTM32触摸屏校准&#xff1a;从原理到实战的完整闭环你有没有遇到过这样的情况&#xff1f;在自己的STM32开发板上跑起了LVGL界面&#xff0c;按钮做得漂漂亮亮&#xff0c;动画也流畅&#xff0c;结果一碰屏幕——点哪儿不对哪儿。明明点了“确定”按钮&…

作者头像 李华
网站建设 2026/6/10 11:52:21

13、持续改进 API:提升可变更性与速度的策略

持续改进 API:提升可变更性与速度的策略 1. API 变更概述 在 API 开发过程中,对其任何部分进行更改都会使变更成本增加,尤其是随着为开发者体验开发更多支持资产时。同时,也可以对支持资产进行独立更改,例如更新文档页面的外观和感觉。这类更改虽对接口模型、实现或实例无…

作者头像 李华
网站建设 2026/6/10 14:19:50

基于帧间相似度分析的视频PPT智能提取技术

基于帧间相似度分析的视频PPT智能提取技术 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 在数字化教育和工作场景中&#xff0c;从视频内容中提取PPT幻灯片已成为重要的技术需求。传…

作者头像 李华
网站建设 2026/6/9 19:56:25

12、高级内存取证中的STL容器剖析

高级内存取证中的STL容器剖析 在软件开发尤其是游戏开发中,有效地管理数据是至关重要的。C++标准模板库(STL)提供了一系列强大的容器类,如 std::vector 、 std::list 和 std::map ,它们在游戏内存管理中发挥着重要作用。本文将深入探讨这些容器的结构、使用方法以及…

作者头像 李华
网站建设 2026/6/10 15:10:22

16、API 产品生命周期各阶段关键支柱解析

API 产品生命周期各阶段关键支柱解析 1. 退休阶段里程碑与影响因素 退休阶段的里程碑代表着一个下限或上限阈值。例如,可以为维护阶段的 API 设置必须服务的最小请求数,或者在产品进入退休阶段之前设置最大成本水平。产品退休的成本因它所支持的应用程序类型和开发者用户规…

作者头像 李华