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

C语言_可变参数_LOG宏

      LOG宏一般处理,没有参数,只有字符串参数,字符串格式和一个参数,多个参数的场合。以下是针对常见的应用场合举例说明,可便参数的使用。

代码

#include <stdio.h>#define LOG(format, ...)  printf("[%s][%d]" format "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__)int main() {LOG();LOG("abc");LOG("abc %d", 10);LOG("abc %d %s", 10, "efg");return 0;
}    

预编译

renhl252@renhl:~/usb/c$ gcc main.c -E -o main.i

  预编译结果

# 5 "main.c"
int main() {printf("[%s][%d]" "\n", __FUNCTION__, 6);printf("[%s][%d]" "abc" "\n", __FUNCTION__, 7);printf("[%s][%d]" "abc %d" "\n", __FUNCTION__, 8, 10);printf("[%s][%d]" "abc %d %s" "\n", __FUNCTION__, 9, 10, "efg");return 0;
}

   预编译结果解析

调用形式format 字符串可变参数展开后的 printf 调用
LOG();  printf("[%s][%d]\n", __FUNCTION__, __LINE__);
LOG("abc");"abc"printf("[%s][%d]abc\n", __FUNCTION__, __LINE__);
LOG("abc %d", 10);"abc %d"10printf("[%s][%d]abc %d\n", __FUNCTION__, __LINE__, 10);
LOG("abc %d %s", 10, "efg");"abc %d %s"10"efg"printf("[%s][%d]abc %d %s\n", __FUNCTION__, __LINE__, 10, "efg");
  • 可变参数处理## 是预处理器的连接符,其作用是在可变参数为空时去除多余的逗号,从而避免出现编译错误。

编译

renhl252@renhl:~/usb/c$ gcc main.c

测试结果

renhl252@renhl:~/usb/c$ ./a.out
[main][6]
[main][7]abc
[main][8]abc 10
[main][9]abc 10 efg
renhl252@renhl:~/usb/c$

 

 

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

相关文章:

  • 2.Redis高阶实战
  • git常用命令
  • RN学习笔记 ✅
  • 如何判断内核模块是否为最新版本?
  • tinyrenderer笔记(上)
  • 【Linux我做主】深入探讨从冯诺依曼体系到进程
  • v-modal失效如何解决
  • 深入浅出iOS性能优化:打造极致用户体验的实战指南
  • 仓颉语言深度解析
  • 如何建设网站?网站建设简单步骤有哪些?
  • 认识不同格式的点云数据 -OFF格式数据转点云
  • 程序员学商务英语之Shipment Claim 运输和索赔
  • C#问题 加载格式不正确解决方法
  • Python生活手册-Numpy多维数组构建:从快递分拣到智能家居的数据变形术
  • 【AI微信小程序开发】火锅计时小程序项目代码:自动涮煮计时(含完整前端代码)
  • cesium之自定义地图与地图叠加
  • python刷题笔记:三目运算符的写法
  • vue3+vite+AI大模型实现谷歌插件-web诊断
  • 高频PCB设计如何选择PCB层数?
  • 视觉爬虫开发:通过Puppeteer截图+CV定位动态元素坐标
  • 线上部署的项目Redis突然宕机了怎么办
  • 解决 Exception in thread “main“ java.lang.NoClassDefFoundError
  • CPU:为什么Ryzen 7000系列处理器PCIe通道总数是28,而可用的通道数是24?
  • 【coze】工作流(B站视频总结改写)
  • 推荐两本集成电路制作书籍
  • 14.Spring Boot 3.1.5 集成 Spring Security 进行访问控制
  • SQL Server执行安装python环境
  • GIS中常见的影像数据格式和类型
  • 【SpringBoot教程】SpringBoot自定义注解与AOP实现切面日志
  • Spring Boot Starter简介-笔记