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

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]%s\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$

相关文章:

  • 《AI大模型应知应会100篇》第49篇:大模型应用的成本控制策略
  • 5.6 react组件化开发基础
  • ABAQUS三维CT重建插件CT2Model3D V2版本
  • 前端取经路——JavaScript修炼:悟空的九大心法
  • kaggle注册问题
  • Kafka Consumer的auto.offset.reset参数有哪些配置?适用场景?
  • 原子操作的is_lock_free() 接口说明
  • Apache Doris与StarRocks对比
  • postgresql-15 更改默认存储路径
  • SQL Server 备份加密和解密还原
  • vue2 provide 后 inject 数据不是响应式的,不实时更新
  • 光纤失效模式及其影响
  • 【中间件】brpc之工作窃取队列
  • 【2025年】基于电脑的jdk1.8通过idea创建springboot2.x版本(非常简洁快速)
  • 64.微服务保姆教程 (七) RocketMQ--分布式消息中间件
  • Excel 数据 可视化 + 自动化!Excel 对比软件
  • IoTDB磁盘I/O性能监控与优化指南
  • 力扣-hot100 (矩阵置零)
  • 机器学习实操 第二部分 神经网路和深度学习 第13章 使用TensorFlow加载和预处理数据
  • 高等数学第六章---定积分(§6.2定积分在几何上的应用2)
  • 上海市委政法委召开会议传达学习总书记重要讲话精神
  • 金融政策支持稳市场稳预期发布会即将召开,潘功胜、李云泽、吴清将出席
  • 商务部新闻发言人就中美经贸高层会谈答记者问
  • 南方地区强降雨或致部分河流发生超警洪水,水利部部署防范
  • 100%关税!特朗普要让美国电影100%美国制造
  • 五一上海楼市热闹开局:售楼处全员到岗,热门楼盘连续触发积分