Тип CLOCKS_PER_SEC - PullRequest
       1

Тип CLOCKS_PER_SEC

7 голосов
/ 25 мая 2011

Какой тип данных CLOCKS_PER_SEC обычно представлен как? long unsigned int? clock_t? Отличается ли это от реализации к реализации?

Я спрашиваю, потому что я использую CLOCKS_PER_SEC в возвращаемом значении, и я хочу убедиться, что я использую наиболее подходящий тип.

Ответы [ 3 ]

7 голосов
/ 25 мая 2011

Все, что обещает стандарт C, это то, что CLOCKS_PER_SEC является константным выражением с типом clock_t, который должен быть арифметическим типом (может быть целым или плавающим типом).

(C99 7.23Дата и время <time.h>)

Я думаю, что clock_t, как правило, long, но я бы не поспорил, что я прав.

Мой обычно верный Харбисон& Стил (3-е изд) предлагает использовать clock_t к double для использования в ваших программах, чтобы ваш код мог работать независимо от фактического типа clock_t (18.1 CLOCK, CLOCK_T, CLOCKS_PER_SEC, TIMES):

Вот как можно использовать функцию clock для измерения времени программы ANSI C:

#include <time.h>
clock_t start, finish, duration;
start = clock();
process();
finish = clock();
printf("process() took %f seconds to execute\n", 
         ((double) (finish - start)) / CLOCKS_PER_SEC );

Обратите внимание, что приведение к типу double позволяет clock_t и CLOCKS_PER_SEC быть либос плавающей точкой или целое число.

Вы можете подумать, будет ли это работать для ваших целей.

3 голосов
/ 25 мая 2011

CLOCKS_PER_SEC - это макрос, который обычно расширяется до литерала.

В руководстве glibc говорится:

В системе GNU clock_t имеет видэквивалентно long int, а CLOCKS_PER_SEC - целочисленное значение.Но в других системах и clock_t, и тип макроса CLOCKS_PER_SEC могут быть целочисленными или с плавающей точкой.Приведение значений времени процессора к удвоению, как в примере выше, гарантирует, что такие операции, как арифметика и печать, работают правильно и согласованно, независимо от того, что является базовым представлением.

1 голос
/ 25 мая 2011

CLOCK_PER_SEC фактически указывается POSIX как часть заголовка time.h .

Это говорит о том, что это clock_t, как описано sys / types.h .

Это, в свою очередь, говорит:

time_t и clock_t должны быть целыми или действительными типами.

Таким образом, все, что вы можете предположить в переносимом кодечто это какой-то целочисленный тип или тип с плавающей точкой.Если вам просто нужно объявить переменную для хранения значения, объявите его как «clock_t».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...