两个时间结构的 tv_sec 怎么可能相同但减去它们给我一个非零值

How is it possible that tv_sec of both timeval structures are the same but subtracting them gives me a non zero value

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

以上怎么可能?究竟是怎么回事?

%d 不是用于 long intelaspsed_time_s 的正确转换。 (顺便说一下,正确的拼写是“elapsed”。)使用 %ld 表示 elaspsed_time_s

%d 也不是用于 tv_sec 成员中的 time_t 值的正确转换。在 POSIX 系统上,time_t 是整数类型,但据我所知,它不一定是 int。要打印 time_t 值,您可以将其转换为 long 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);