将宏转换为函数调用

use*_*000 0 c

我有一个创建的宏,它将打印所有打印的时间戳.

void timestamp()
{
    struct timeval tv;
    gettimeofday(&tv,NULL);
    printf("%d",tv.tv_sec );
}

#define printf_all(format, ...) {                           \
    static const char format_string[] = format; \
    printf(format_string, ##__VA_ARGS__);                  \
    timestamp(); \
}

int main()
{
    printf_all("%d\n",10);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想将此宏转换为函数.但是在传递论据时我遇到了问题.

void printf_timestamp(static const char format_string[]) {                           
    static const char format_string[] = format; 
    printf(format_string, ##__VA_ARGS__);                  
    timestamp(); 
}
Run Code Online (Sandbox Code Playgroud)

orl*_*rlp 5

你可以使用vprintf:

int printf_timestamp(const char* fmt, ...) {
    va_list args;
    int result;

    va_start(args, fmt);
    result = vprintf(fmt, args);
    va_end(args);
    timestamp();

    return result;
}
Run Code Online (Sandbox Code Playgroud)