anat0lius
anat0lius

Reputation: 2265

What is the standard way to log a program in C?

Programs in C that have --verbose or --debug option, how they actually implement it? Without using 3rd party libraries.

My goal is not to do this all the time:

if(debug) printf("Debug msg\n");
printf("Info msg\n"); 

Upvotes: 0

Views: 986

Answers (2)

InsertMemeNameHere
InsertMemeNameHere

Reputation: 2433

The most common I've seen is to print to stderr.

#ifdef DEBUG
#define DEBUG_MESSAGE(fmt, ...) fprintf(stderr, fmt ## "\n", __VA_ARGS__)
#else
#define DEBUG_MESSAGE(fmt, ...)
#endif

Elsewhere...

DEBUG_MESSAGE("VERBOSE: %s", "This is a verbose message.");

EDIT

Something that would work at runtime:

#define DEBUG_MESSAGE(fmt, ...)\
do{\
    if(g_debugEnabled) fprintf(stderr, fmt ## "\n", __VA_ARGS__);\
}while(0)

Which can be used similarly.

LAST EDIT

Changed to use arbitrary format string with __VA_ARGS__.

Upvotes: 5

Santosh A
Santosh A

Reputation: 5341

You can refer the below program where a macro is defined and based on the option passed to the executable logging is enabled.

    #include <stdio.h>
    #include <string.h>

    #define STREQ(a, b) !(strcmp((a), (b)))
    #define logmsg(fmt, ...) \
        do { \
            if (debug) \
            printf(fmt, ##__VA_ARGS__);\
        }while(0)
    char debug;

    int main(int argc, char *argv[])
    {
        if (argc > 1) {
            if ( STREQ(argv[1], "debug"))
                debug = 1;
        }

        logmsg("%s\n", "hello_world");

        return 0;
    }

Pass debug as the first argument to the executable to enable logging

Note : This program has been tested on Linux with gcc compiler

Upvotes: 1

Related Questions