#define print_line(fmt,...) do{\
struct timespec _t; clock_gettime(CLOCK_MONOTONIC, &_t);\
printf("%ld.%ld %s:%d: " fmt "\n", _t.tv_sec + _t.tv_nsec / 1000000, __func__, __LINE__, ##__VA_ARGS__);\
}while(0)
struct timespec timeval;
print_line(timeval)
收到错误:error: expected ')' before .
答案 0 :(得分:1)
"..." fmt "..."
中显示的#define
仅在fmt
为字符串文字("..."
)时才有效。
我怀疑你想要更多的东西:
#define print_line(fmt,...) do{\
char str[100]; \
sprintf(str, "%%ld.%%ld %%s:%%d: %s\n", fmt);\
printf(str, 1.0 / 1000000, __func__, __LINE__, ##__VA_ARGS__);\
}while(0)
测试:
char *i = "hello%s";
print_line(i, "abc");
另一件事--C不知道如何将struct timespec
转换为字符串,因此您需要执行以下操作:(如果timespec以除了以null结尾的char数组之外的任何内容开头,则赢得&# 39;工作)
struct timespec
{
char abc[100];
};
struct timespec ts;
sprintf(ts.abc, "hello%%s"); // for testing
print_line(&ts, "abc");
还有一件事 - "%ld。%ld"似乎打印出垃圾,我不完全确定原因。也许你想要"%f"代替。
答案 1 :(得分:0)
我认为你只需打印一个debbuging工具,只需打印你要使用的变量的名称,时间以秒和毫秒为单位,源代码位置和一些可选注释。
#define print_line(fmt,...) do{\
struct timespec _t; clock_gettime(CLOCK_MONOTONIC, &_t);\
printf("%ld s %ld ms %s:%d: %s" " fmt " "\n", _t.tv_sec , _t.tv_nsec / 1000000, __func__, __LINE__, ##__VA_ARGS__);\
}while(0)
使用:
struct timespec timeval;
print_line(timeval) ;