c语言有关va_list 的运用和实现


#include<stdlib.h>
#include<stdarg.h>
#include<time.h>
#include<string.h>
#define ZONE __FILE__,__LINE__
#define MAX_DEBUG 1024
void debug_log(const char *file, int line, const char *msgfmt, ...)
{
    va_list ap;
    int n;
    char *pos, message[MAX_DEBUG];
    int sz;
    time_t t;

    /* timestamp */
    t = time(NULL);
    pos = ctime(&t);
    sz = strlen(pos);
    /* chop off the \n */
    pos[sz-1]=' ';

    /* insert the header */

    n = snprintf(message, MAX_DEBUG, "%s%s:%d ", pos, file, line);
    if (n > 0)
        sz = n;
    else
        sz = 0;
    pos = message;
    va_start(ap, msgfmt);
    vsnprintf(pos+sz, MAX_DEBUG - sz, msgfmt, ap);
    va_end(ap);
    fprintf(stderr,"%s", message);
    fprintf(stderr, "\n");
    fflush(stderr);
}

int main()
{     
    debug_log(ZONE, "%d<------------------>%d", 10, 11);
    return 0;
}   

你可能感兴趣的:(c)