当前位置: 首页 > 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.dtcms.com/a/346511.html

相关文章:

  • 单例模式与线程池
  • Ollama 本地部署 Qwen2.5-7b
  • 神经网络|(十一)概率论基础知识-贝叶斯公式和全概率公式
  • 概率论基础教程第六章 随机变量的联合分布(二)
  • C++哈希表:unordered_map与unordered_set全解析
  • day12(练习题)
  • Java微服务架构设计模式详解
  • Baumer高防护相机如何通过YoloV8深度学习模型实现社交距离的检测识别(python)
  • 【Protues仿真】基于AT89C52单片机的超声波测距
  • 关于微服务下的不同服务之间配置不能通用的问题
  • `strdup` 字符串复制函数
  • 自控笔记 控制框图简化+梅森公式复习
  • Spring Boot 实时广播消息
  • 分布式蜜罐系统的部署安装
  • TypeScript 类中提供的 public、private 和 protected 修饰符的作用理解
  • C++程序嵌入python脚本调试
  • 搜索算法在实际场景中的应用
  • 系统思考:突破复杂困境
  • Python 十进制转二进制
  • 使用隧道(Tunnel)连接PostgreSQL数据库(解决防火墙问题)(含Java实现代码)
  • GIS实现综合应急管理平台及应用
  • Linux系统 --- 指令
  • CMake link_directories()详细介绍与使用指南
  • 算法题(188):团伙
  • 【0基础PS】蒙版与剪贴蒙版详解
  • `strchr` 字符串查找函数
  • 信息结构统一论:物理世界与人类感知、认知及符号系统的桥梁
  • 嵌入式-时钟树和时钟树编程-Day20
  • 大宗商品、股票指数及ETF期权五档买卖分时tick级历史交易数据深度解析
  • zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS