1
timeval end_time;
timeval Dbg_timer;

上述时间结构gettimeofday()在某些时候被初始化。

以下是我计算时差的方法:

long int elaspsed_time_s  = end_time.tv_sec - Dbg_timer.tv_sec;
printf("elaspsed_time_s =%d -> end_time_tv_sec=%d  Dbg_timer_tv_sec=%d \n", 
        elaspsed_time_s,       end_time.tv_sec,    Dbg_timer.tv_sec);

输出:

elaspsed_time_s =3 -> end_time_tv_sec=1631446699  Dbg_timer_tv_sec=1631446699

以上怎么可能?到底发生了什么?

4

1 回答 1

1

%d不是用于long intvalue的正确转换elaspsed_time_s。(顺便说一句,正确的拼写是“elapsed”。) 使用%ldfor elaspsed_time_s

%d也不是用于成员中time_t值的正确转换tv_sec。在 POSIX 系统上,是整数类型,但据我所知,time_t它不一定是。int要打印一个time_t值,您可以将其转换为 along int并使用 打印它%ld

printf("elaspsed_time_s =%ld -> end_time_tv_sec=%ld  Dbg_timer_tv_sec=%ld \n", 
        elaspsed_time_s,
        (long int) end_time.tv_sec,
        (long int) Dbg_timer.tv_sec);

或者,您可以通过以下方式包含<stdint.h><inttypes.h>打印它uintmax_t

printf("elaspsed_time_s =%ld -> end_time_tv_sec=%" PRIuMAX "  Dbg_timer_tv_sec=%" PRIuMAX " \n", 
        elaspsed_time_s,
        (uintmax_t) end_time.tv_sec,
        (uintmax_t) Dbg_timer.tv_sec);
于 2021-09-12T12:41:08.403 回答