0

#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 .

4

2 回答 2

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 以空终止字符数组以外的任何内容开头,则它将不起作用)

struct timespec
{
   char abc[100];
};
struct timespec ts;
sprintf(ts.abc, "hello%%s"); // for testing
print_line(&ts, "abc");

还有一件事 - "%ld.%ld" 似乎打印出垃圾,我不完全确定为什么。也许你想要 "%f" 代替。

于 2013-01-24T09:08:19.393 回答
0

我假设您想要一个调试工具,只需打印您将要使用的变量的名称、时间(以秒和毫秒为单位)、源代码位置和一些可选注释。

#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) ;
于 2013-01-24T08:30:25.197 回答