跟踪静态内联函数
Tracing static inline function
我正在尝试向我的应用程序添加一些调试工具,但现在坚持使用 static inline
函数。正如我从这个 中了解到的那样,可以将 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);
...
但仍在使用预处理器。
我正在尝试向我的应用程序添加一些调试工具,但现在坚持使用 static inline
函数。正如我从这个 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);
...
但仍在使用预处理器。