博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++日志之获取函数的名字,行号,文件名
阅读量:6000 次
发布时间:2019-06-20

本文共 1341 字,大约阅读时间需要 4 分钟。

在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__

先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。

ANSI C标准中有几个标准预定义宏(也是常用的):
__LINE__:在源代码中插入当前源代码行号;
__FILE__:在源文件中插入当前源文件名;
__DATE__:在源文件中插入当前的编译日期
__TIME__:在源文件中插入当前编译时间;
__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
__cplusplus:当编写C++程序时该标识符被定义。

 

代码:

#define LOG(level, format, ...) /    do { /        fprintf(stderr, "[%s|%s@%s,%d] " format "/n", /            level, __func__, __FILE__, __LINE__, ##__VA_ARGS__ ); /    } while (0)int main(){    LOG(LOG_DEBUG, "a=%d", 10);    return 0;}

运行结果:

[DEBUG|main@a.c,17] a=10

  

限制是format不能是变量,必须是常量字符串,如果要记录一个变量字符串,不能像printf那样printf(s)了,要LOG("DEBUG", "%s", s)。

 

 

另外还有一种:

//============================================================================// Name : debug.cpp// Author : boyce// Version : 1.0// Copyright : pku// Description : Hello World in C++, Ansi-style//============================================================================#include 
#define __DEBUG__#ifdef __DEBUG__#define DEBUG(format,...) printf("File: "__FILE__", Line: %05d: "format"\n", __LINE__, ##__VA_ARGS__)#else#define DEBUG(format,...)#endifint main(int argc, char **argv) { char str[]="Hello World"; DEBUG("A ha, check me: %s",str); return 0;}

  

 

转载于:https://www.cnblogs.com/cthon/p/9193378.html

你可能感兴趣的文章
Elasticsearch 参考指南(安装X-Pack)
查看>>
[LintCode] 604. Design Compressed String Iterator
查看>>
微信小程序黑客马拉松即将开始,来做最酷的 Mini Program Creators!
查看>>
从人肉到智能,阿里运维体系经历了哪些变迁?
查看>>
JavaScript基础---函数
查看>>
前端每日实战:120# 视频演示如何用纯 CSS 创作锡纸撕开的文字效果
查看>>
electron写一个简单host切换工具
查看>>
Bytom矿池接入协议指南
查看>>
前端每日实战 2018 年 8 月份项目汇总(共 29 个项目)
查看>>
Linux 和 vim使用
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
【跃迁之路】【538天】程序员高效学习方法论探索系列(实验阶段295-2018.07.28)...
查看>>
搭建基于express框架的运行环境
查看>>
关于angular4通过npm安装bootstrap插件在启动时候报错问题。
查看>>
HTML CSS + DIV实现排版布局
查看>>
Laravel实用小功能
查看>>
IMI 基于 Swoole 开发的协程 PHP 开发框架 常驻内存、协程异步非阻塞
查看>>
SpringOne Platform大会见闻
查看>>
携程基于云的软呼叫中心及客服平台架构实践\n
查看>>
云端能力知几许?12人众测华为云企业级Kubernetes集群实力
查看>>