Encontrei uma coisa estranha no meu programa. Aqui estão dois exemplos
#include <stdio.h>
int main() {
time_t t1, t2;
t1 = 1735689614;
t2 = 1735689600;
printf("difftime =%d \n", difftime(t1, t2)); // difftime() return int
}
#include <stdio.h>
#include <time.h>
int main() {
time_t t1, t2;
t1 = 1735689614.0;
t2 = 1735689600.0;
printf("difftime =%f \n", difftime(t1, t2)); // difftime() return double
}
você pode notar que #include<time.h>
e o valor de retorno dedifftime()
Os difftime()
dois exemplos são funções diferentes.
Eu sei que double difftime()
é a função padrão de time.h (C11)
. Mas int difftime()
de onde vêm?
É um problema muito estranho e sutil ao programar em c no vs2022. Eu mudei o padrão c para C11
no vs2022. E o programa compilou OK. Eu pensei que ele usaria o double difftime()
sem #inlcude<time.h>
.
Embora este problema possa ser visto claramente ao usargcc
implicit declaration of function 'difftime' [-Wimplicit-function-declaration]
Na primeira versão, você não inclui
<time.h>
, e portantodifftime
é implicitamente declarado como retornando,int
enquanto na verdade retorna umdouble
.A propósito, o compilador avisa você com esta mensagem:
warning C4013: 'difftime' undefined; assuming extern returning int
.Então basicamente a primeira versão do seu código está quebrada.
Considere todos os avisos que contenham as palavras "indefinido" e "assumindo" como erros.