Чтобы иметь возможность отключить или подключить весь отладочный вывод в коде в одном месте, я использую следующую конструкцию:
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> typedef enum { DL_INFO = 0, DL_ERROR } DebugLevel; char * dlToString(DebugLevel dl) { static char INFO [] = "INFO"; static char ERROR [] = "ERROR"; switch(dl) { default: case DL_INFO: return INFO; case DL_ERROR: return ERROR; } } void printDebugString(const char * file, int line, const char * method, DebugLevel dl, const char* format, ...) { va_list arglist; va_start(arglist, format); printf("%s: %s:%d:%s:", dlToString(dl), file, line, method); vprintf(format, arglist); va_end(arglist); } #define DEBUG_PRINT(LEVEL, FMT, ...) printDebugString(__FILE__, __LINE__, __PRETTY_FUNCTION__, LEVEL, FMT, ##__VA_ARGS__)