Искал ответ для этого, но не мог ничего найти. Самое близкое, что я мог найти, было
difftime возвращает 0, когда есть явная разница Что имеет большое объяснение, касающееся того, как аргументы помещаются в стек и что ожидает формат, но я думаю, что моя проблема в другом:
Я сделал как можно более простой пример. Предположим, у меня есть следующий код в C:
time_t starttime = time(NULL)
somefunction();
time_t newtime = time(NULL)
fprintf(stderr, "starttime %f and difftime %f\n", starttime, difftime(newtime, starttime));
fprintf(stderr, "difftime %f and starttime %f\n", difftime(newtime, starttime), starttime);
return 0;
И некоторые функции - это некоторые функции, которые выполняются в течение 1 или 2 секунд. Вывод, который я получаю для этого:
starttime 2.000000 and difftime 0.000000
difftime 2.000000 and starttime 0.000000
Я даже не знаю, с чего начать мой вопрос. Почему, когда я меняю порядок, выводимые значения остаются прежними? Кроме того, почему одно из значений 0? Это то же самое, использую ли я% f,% d,% lu,% llu и т. Д. Есть ли объяснение стек-аргумента этому? Что на самом деле делает fprintf внутри?
Спасибо. Я потратил слишком много своей жизни, пытаясь отладить это, и я был бы очень признателен за вашу помощь!