得到错误:错误:预期')'之前

时间:2013-01-24 07:48:18

标签: c

A.H

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

2 个答案:

答案 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) ;