加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何编写一个日志函数或宏,可以将调用者的名称附加到C中的日志输

发布时间:2020-12-16 10:10:19 所属栏目:百科 来源:网络整理
导读:我需要C语言中的日志功能或宏,它应该在 Linux中工作,可以接受格式字符串和参数列表,并且可以将调用者的函数名称附加到输出字符串. 这是一个例子.假设日志记录功能(宏)称为smart_log.看起来像: smart_log(const char *fmt,...) 第一个参数fmt是一个格式字符
我需要C语言中的日志功能或宏,它应该在 Linux中工作,可以接受格式字符串和参数列表,并且可以将调用者的函数名称附加到输出字符串.

这是一个例子.假设日志记录功能(宏)称为smart_log.看起来像:

smart_log(const char *fmt,...)

第一个参数fmt是一个格式字符串,就像printf中的格式字符串一样.
fmt之后是feed fmt的其他参数列表.

假设一个名为example_function的函数以这种方式调用smart_log:

void example_function() {
    smart_log("try to output number %dn",1);
}

然后日志字符串看起来像:

[example_function]: try to output number 1

所以关键是smart_log将调用者的函数附加到格式字符串.

我不知道如何在C中实现这一点.我认为可以使用宏来实现这一目标.

解决方法

函数没有可移植的方式来在C中知道它的调用者.但是你是对的,一个宏工作:

#define smart_log(...) ( printf("[%s]: ",__func__),printf(__VA_ARGS__) )

__func__已定义(C99 / C11 6.4.2.2 p.1)

as if,immediately following the opening brace of each function definition,the declaration

static const char __func__[] = "function-name";

appeared,where function-name is the name of the lexically-enclosing function.

感谢Hagen von Eitzen改进我原来的尝试!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读