@难易 你好,想跟你请教个问题:最近使用vzlog函数时发现代码所在文件名长度最多只能为3,代码跟踪发现是传入的文件名长度不对,我之前传的是sizeof(file)-1,改为strlen(file)就OK了,之所以用前者是因为我看到zlog.h头文件中各种宏定义都是这么传参的。刚看了你最新代码也是这样的,不知道会不是是个问题。
明白了,我是在函数里面使用的vzlog函数,而你是在宏定义里面使用的,在编译期会展开宏并计算出正确长度,函数调用因为传入的是文件名指针就不会这样,所以只能用strlen获取文件长度。实质上是sizeof(字符串字面值) != sizeof(相同字符串指针)的原因。
在我这边的环境可以没问题,可能是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 评论 0
接受
发布评论
评论(2)
明白了,我是在函数里面使用的vzlog函数,而你是在宏定义里面使用的,在编译期会展开宏并计算出正确长度,函数调用因为传入的是文件名指针就不会这样,所以只能用strlen获取文件长度。实质上是sizeof(字符串字面值) != sizeof(相同字符串指针)的原因。
在我这边的环境可以没问题,可能是C的预处理器对__FILE__宏处理不一样
用strlen不会出错,只是
性能上依赖于编译器的优化,
sizeof我开始这么用是为了保证编译阶段就能获得长度。