当前位置: 首页 > news >正文

C语言宏用法

   宏(Macro)是C语言中一种预处理机制,通过#define指令定义,用于在编译前替换代码中的特定文本。宏可以简化代码、提高效率,但需注意其潜在风险。本文章将总结C语言宏的基本使用方法和技巧。所有用法举例都基于 Ubuntu20.04.6LTS、GNU C99标准。

  • C99 变参宏

        C语言变参宏同变参函数一样可接收任意个数的参数,称为变长参数。函数原型中变长参数用...表示,C99 标准中可以使用__VA_ARGS__转发变长参数。如下代码片段定义了名为“print”的宏函数,它接受固定参数 fmt 和变长参数;当变长参数为空时,__VA_ARGS__ 转发的参数为空,所以 fmt 后面会有多余的逗号分隔符会导致编译错误。不过GNU有规则解决该问题——用  ## 连接__VA_ARGS__ 和 逗号分隔符,这样就可以消除多余的逗号分隔符

// 版本1(多余的逗号分隔符)
#define print(fmt, ...) printf(fmt, __VA_ARGS__)
print("12345"); // printf("12345",);// 版本2
#define print(fmt, ...) printf(fmt, ##__VA_ARGS__)
print("12345"); // printf("12345");

http://www.xdnf.cn/news/1350271.html

相关文章:

  • Python 地理空间分析:核心库与学习路线图
  • ESP32应用——UDP组播/广播(ESP-IDF框架)
  • HarmonyOS 递归实战:文件夹文件统计案例解析
  • 配置npm国内源(包含主流npm镜像源地址)
  • 北极圈边缘生态研究:从数据采集到分析的全流程解析
  • 在github上通过dmca数字版权申诉侵权并删除侵权仓库
  • 【84页PPT】智慧方案某著名企业某集团协同OA整体解决方案(附下载方式)
  • IntelliJ IDEA 集成 ApiFox 操作与注解规范指南
  • C++ + Boost + MySQL 项目完整教程
  • mysql的mvcc
  • 如何用Redis作为消息队列
  • Science Robotics 通过人机交互强化学习进行精确而灵巧的机器人操作
  • Flink框架:算子链的介绍
  • iview admin 使用mock.js模拟数据
  • 01_Python的in运算符判断列表等是否包含特定元素
  • C语言初学者笔记【动态内存管理】
  • 深入探讨集成学习:Bagging与Boosting的核心原理与实践
  • 自然语言处理——05 Transformer架构和手写实现
  • 复杂街景误检率↓79%!陌讯动态融合算法在街道垃圾识别的边缘计算优化​​
  • Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
  • 链表漫游指南:C++ 指针操作的艺术与实践
  • 蓝牙链路层状态机精解:从待机到连接的状态跃迁与功耗控制
  • 【大语言模型 15】因果掩码与注意力掩码实现:深度学习中的信息流控制艺术
  • Python本源诗话(我DeepSeek)
  • 企业视频库管理高效策略
  • 大数据接口 - 企业风险报告(专业版)API接口文档
  • 使用springboot开发-AI智能体平台管理系统,统一管理各个平台的智能体并让智能体和AI语音设备通信,做一个属于自己的小艾同学~
  • 百度深度学习面试:batch_size的选择问题
  • 36_基于深度学习的智能零售柜物品检测识别系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
  • 【深度学习新浪潮】有哪些工具可以帮助我们对视频进行内容分析和关键信息提取?