문제
둘의 차이가 왜 나는지 time_t
에 의해 반환되었습니다. difftime( time_t t1, time_t t2)
방법을 double
?정밀도 요구 사항이 어디서 나오는지 알 수 없습니다.
해결책
time_t
가 표준에서 arithmetic type capable of representing times
로 정의되기 때문에
그것이 그것에 대해 말하는 모든 것에 관한 것입니다. 정수 일 필요는 없으며 초를 나타낼 필요가 없습니다. 10 개의 -43 초의 해상도로 시간을 표현할 수있는 10 개의
의 해상도로 시간을 표현할 수있는 부동 소수점 유형 일 수 있습니다. C99 7.23.1 Components of time
의 인용문은 (약간 기사) :
선언 된 유형은 time을 나타내는 산술 유형 인
clock_t
및time_t
입니다. clock_t 및 time_t에서 표현할 수있는 시간 범위와 정밀도는 구현이 정의되어 있습니다.
다음과 같은 시간의 차이를 맹목적으로 운동하는 사람들 :
delta = time_end - time_begin;
.
는 모든 플랫폼에서 코드가 작동하지 않는다는 것을 알 수 있습니다.
이제는 EPOCH 이후의 간단한 초가 아닌 플랫폼을 모르지만 EPOCH 이후의 간단한 초가 아닌 모든 플랫폼을 알지 못하지만 PERANACODICETAG 코드를 통해 처럼 처럼 가정에 의해 물렸다. A
는 연속적이지만 실제로는 필요하지 않으며 EBCDIC을 사용하는 메인 프레임 제품에서 잘 작동하지 않습니다. 그리고, 아직도 무거운 분명히 '60s : -)
유형
Z
및clock_t
는 기존의 연습에 따라 이러한 유형의 값이 필요합니다. 즉, 기존의 연습에 따라 -1 ( "알지 못한"표시)과 비교할 때,이러한 유형의 산술 속성은 표준에 의해 정의되지만, 구현은 의도 된 응용 프로그램에 가장 적합한 범위, 정밀도 및 표현을 선택할 수있는 최대 유연성을 허용합니다. 표현은 몇 가지 기본 단위의 카운트 일 필요는 없습니다. 구현은 정수 유형의 서브 필드로서 시간 값의 다른 구성 요소를 인상적으로 표현할 수 있습니다.
다른 팁
어떤 시대가 시작된 이후 초를 나타내는 정수형으로 보편적으로 생각되고 구현되었음에도 불구하고, time_t
실제로는 공식적으로 정의되어 있지 않으므로 difftime의 결과를 이식적으로 사용할 수 없습니다. time_t
.다른 대안은 다음과 같습니다. int
어떤 상황에서는 너무 작습니다(예: long
) 그리고 long long
휴대용이 아닙니다.
는 아마도 그것이 가장 일반적인 산술 유형이기 때문일 것입니다.기본 time_t
가 지원하는 경우 두 번째 정밀도보다 나은 정밀도가 좋습니다.
이유는 Type time_t
유형에 대해 정의 된 산술 작업이 없으므로 Double을 반환하여 계산 결과를 사용할 수 있음을 알 수 있습니다.
iOW는 TIME_T가 부호없는 INT 또는 일반 int로 정의 된 경우 다른 동작이 정의되면 다른 동작이 발생할 수 있으므로 다른 동작이 발생할 수 있으므로 안전하지 않은 영역에 두 개의 time_t
값을 추가하십시오.