Я использую это довольно давно (достаточно долго, чтобы изначально было написано для MS-DOS). Он всегда записывает вывод синхронизации в stderr, поэтому он отправляется на консоль, даже если / если стандартный вывод направлен в файл. Теоретически, вы можете записать это непосредственно на консоль отдельно от стандартной ошибки, но мне это никогда не требовалось, поэтому я никогда этого не делал.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <process.h>
#include <malloc.h>
#include <string.h>
#if defined(WIN32) || defined(_WIN32)
#include <windows.h>
#else
#include <dos.h>
#endif
int main(void) {
clock_t start, end;
char *cmd;
#ifdef WIN32
char *cmd_line = strdup(GetCommandLine());
#else
char *cmd_line = 0x80;
#endif
int seconds, tenths;
char seps[] = " \r\n\t/";
_heapmin();
strtok(cmd_line, seps);
cmd_line = strtok(NULL, "");
start = clock();
system(cmd_line);
end = clock();
cmd = strtok(cmd_line, seps );
seconds = (end-start) / CLOCKS_PER_SEC;
tenths = (end-start) / ( CLOCKS_PER_SEC / 10 );
tenths -= seconds * 10;
fprintf(stderr, "\n`%s' took %d.%d seconds.\n", cmd, seconds, tenths);
return 0;
}
Обратите внимание, что присвоение имени time.exe
будет , а не даст правильные результаты (time
- это команда, встроенная в оболочку, поэтому она никогда не будет выполняться). Вместо этого я обычно называю это «таймер».