Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The type, precision, and range of clock_t are implementation defined. time_t is specified as an "arithmetic type capable of representing times" as size_t, which is "an unsigned integer type", but the unsigned result of the sizeof operator. However, how time is encoding encoded within the arithmetic type is unspecified.

Computing Time Passed

Non-Compliant Code Example

...

Code Block
bgColor#FFCCCC
int do_work(int seconds_to_work) {
  time_t start;
  start = time();
  if (start == (time_t)(-1)) {
    /* Handle error */
  }
  while (time() < start + second_to_work) {
    do_some_work();
  }
}

Compliant

...

Solution

The This compliant code example solution uses difftime() to determine the difference between two time_t values. difftime() returns the number of seconds from the second parameter until the first parameter and returns the result as a double.

...

Note that this loop may still not exit, as the range of time_t may not be able to represent two times seconds_to_work apart.

Compute time in the future or past

This section is incomplete

Risk Assessment

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

MSC05-A

1 (low)

1 (low)

2 (medium)

P4 P2

L2 L3

References

Wiki Markup
\[[Kettlewell 02|AA. C References#Kettlewell 02]\] Section 4.1, "time_t"

...