zlog.h头文件疑问

_ray 发布于 2013/11/20 16:37
阅读 269
收藏 0

@难易 你好,想跟你请教个问题:最近使用vzlog函数时发现代码所在文件名长度最多只能为3,代码跟踪发现是传入的文件名长度不对,我之前传的是sizeof(file)-1,改为strlen(file)就OK了,之所以用前者是因为我看到zlog.h头文件中各种宏定义都是这么传参的。刚看了你最新代码也是这样的,不知道会不是是个问题。

加载中
0
难易
难易

在我这边的环境可以没问题,可能是C的预处理器对__FILE__宏处理不一样

gcc -I(zlog.h所在路径) -E xx.c | more

 zlog(zc, "test_hello.c", sizeof("test_hello.c")-1, __func__, sizeof(__func__)-1
, 30, ZLOG_LEVEL_INFO, "hello, zlog");



用strlen不会出错,只是 性能上依赖于编译器的优化,

sizeof我开始这么用是为了保证编译阶段就能获得长度。

0
_ray
_ray
明白了,我是在函数里面使用的vzlog函数,而你是在宏定义里面使用的,在编译期会展开宏并计算出正确长度,函数调用因为传入的是文件名指针就不会这样,所以只能用strlen获取文件长度。实质上是sizeof(字符串字面值) != sizeof(相同字符串指针)的原因。
返回顶部
顶部