gpt4 book ai didi

c - 跟踪静态内联函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:43 25 4
gpt4 key购买 nike

我正在尝试向我的应用程序添加一些调试工具,但现在坚持使用 static inline 函数。正如我从中了解到的answer可以将 static inline 函数定义放入头文件中,这样函数就不会被实例化两次,以防文件被多次包含。

所以我很好奇,并尝试定义类似的static inline函数来跟踪调用并将其放入头文件中:

#ifndef TRACE_H
#define TRACE_H

static inline void trace(){
printf("Current line %d, func %s, file %s\n", __LINE__, __func__, __FILE__);
}

#endif //TRACE_H

我尝试这样做是因为 static inline 比宏更不容易出错。问题是简单

int main(int argc, char const *argv[])
{
trace();
}

打印 Current line 8, func trace, file/home/somename/include/trace.h 这显然是无用的。

所以除了定义宏之外还有其他方法用于跟踪目的吗

#define trace() \
printf("Current line %d, func %s, file %s\n", __LINE__, __func__, __FILE__); \

最佳答案

I tried this because static inline is much less error-prone then macro.

宏与可以计算两次的参数一起使用是危险的:

#define min(a, b) ((a) < (b)) ? (a) : (b)

但事实并非如此。

我能看到的唯一解决方法是:

#define SOURCE __LINE__, __func__, __FILE__

static inline void trace(int line, const char *func, const char *file)
{
printf("Current line %d, func %s, file %s\n", line, func, file);
}

int main(void)
{
trace(SOURCE);
...

但仍然使用预处理器。

关于c - 跟踪静态内联函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54049362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com