Конечно argv
и argc
являются , а не глобальными переменными, поскольку они являются явно локальными переменными области действия main()
:
int main(int argc, char * argv[]) { /* ... */ }
Для удобной обработки опций, вы можете посмотреть на getopt.h
.
Один из способов подавления вывода - использовать grep
или перенаправление файлов на оболочке (time ./prog > /dev/null
),но это по-прежнему стоит затрат на фактические функции вывода.
Я предлагаю две возможные идеи:
Окружите свои критические функции вызовами clock()
и выполните измерениеи сообщать о себе.
Разрешить пользователю передавать параметр многословия (либо во время выполнения с параметром командной строки, либо во время компиляции с #define
) и печатать только в зависимости отуровень детализации.
Для идеи (1) я использую следующие макросы:
#define CLOCK_TICK(acc, ctr) ctr = std::clock()
#define CLOCK_TOCK(acc, ctr) acc += (std::clock() - ctr)
#define CLOCK_RESET(acc) acc = 0
#define CLOCK_REPORT(acc) 1000. * double(acc) / double(CLOCKS_PER_SEC)
Для идеи (2) я бы сделал что-то вроде этого:
#ifndef VERBOSE
# define VERBOSE 0
#endif
#if VERBOSE > 0
// print level 1
#if VERBOSE > 1
// print level 2
#endif
#endif
Затем вы можете скомпилировать с -DVERBOSE=3
и т. Д., Чтобы включить ведение журнала на определенном уровне.
Если это слишком вручную, вам следует изучить подходящую структуру ведения журнала для вашего приложения.