2013-09-08 5 views
1

В POSIX 2008 части определения функции clock:функция часов между стандартной библиотекой и POSIX

Значение, возвращаемые часов() может обернуть вокруг на некоторых реализациях.

также

CLOCKS_PER_SEC определяется как один миллион в <time.h>.

В стандарте C clock функция имеет важное примечание:

Для того, чтобы измерить время, проведенное в программе, функция синхронизации должна вызываться в начале программы и ее возвращаемое значение вычитается из значение, возвращаемое последующими вызовами.

также

CLOCKS_PER_SEC: который расширяется к выражению типа с clock_t (описан ниже), который является числом в секунду значения, возвращаемого функцией часов.

В POSIX они говорят, что информация, содержащаяся в стандарте POSIX совмещена с с стандартом однако в C Стандарт CLOCKS_PER_SEC является реализация определенных в отличие от POSIX, которые имеют значение, в C Стандарт не оборачивая не должно происходить - получили, что из пример, используемый для расчета времени выполнения приложения - но в POSIX они сказали, что упаковка будет происходить каждые 36 минут.

Когда я использую компилятор c, такой как Gcc, Clang или даже I.C.L. - в Linux, есть clock Возвращаемое значение будет обернуто или неизвестно, что POSIX и c стандартно используют тот же заголовок time.h?

примечание: вместо Linux может использоваться любая платформа, я использовал ее здесь, чтобы привести пример.

Благодаря

+1

Почему это было приостановлено? –

ответ

1

Это ошибка в POSIX. Об этом сообщается, разрешается и будет исправлено в следующей версии. См.: http://austingroupbugs.net/view.php?id=686

Я подозреваю, что потребуется еще много времени, чтобы все исправления ошибок были исправлены.

0

POSIX требования приведены в соответствие с, но более строгие, чем те, в стандарте C.

В стандарте C требуется, чтобы CLOCKS_PER_SEC определялся компилятором. POSIX делает то же самое, но говорит, что он должен иметь одно конкретное значение.

Стандарт C на самом деле ничего не говорит о wraparound - нет прямого утверждения, что оно может обернуться, но также и запрет, говорящий, что он не может. Учитывая конечный размер, неизбежно, что в конце концов он обернется.

+0

хорошо, если CLOCKS_PER_SEC в некоторой реализации определяется как 1, тогда 'clock' не будет обертываться.Однако в этом примере они сказали называть часы в начале и окончании программы, а затем вычесть, если есть шанс на обертку, разве вы не думаете, что они должны были упомянуть об этом, учитывая пример, который они дали? –

+1

@Muhammadalaa: Конечно, он может обернуть, если он 1 (хотя, по общему признанию, требуется достаточно много, поэтому большинство людей не будут запускать программу достаточно долго, чтобы ее увидеть). Что касается того, следует ли упоминать об обертке: в учебнике да. В стандарте - не так много. Пример в стандарте должен осветить требования стандарта, но необязательно должен объяснять все общее использование этой функции. –