CLOCKS_PER_SECはどのようなデータ型ですか? long unsigned int
? clock_t
?実装ごとに異なりますか?タイプCLOCKS_PER_SEC
戻り値にCLOCKS_PER_SEC
を使用していますので、私は尋ねます。私は最も適切なタイプを使用していますか?
CLOCKS_PER_SECはどのようなデータ型ですか? long unsigned int
? clock_t
?実装ごとに異なりますか?タイプCLOCKS_PER_SEC
戻り値にCLOCKS_PER_SEC
を使用していますので、私は尋ねます。私は最も適切なタイプを使用していますか?
そのC標準約束すべてがCLOCKS_PER_SEC
算術タイプ(整数または浮動小数点型であってもよい)でなければならないタイプclock_t
と定数式であることです。
(C99 7.23日付と時刻<time.h>
)
私はclock_t
は通常long
あると思うが、私は私が正しい私の人生を賭けていないでしょう。
:あなたのコードは、実際のclock_t
タイプ(18.1 CLOCK、CLOCK_T、CLOCKS_PER_SEC、TIMES)に関係なく働くことができるように私は通常、信頼できるハービソン&スティール(第3版)は、あなたのプログラムで使用する
double
にclock_t
をキャストすることを示唆していますキャストはを入力する方法#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);
注:ここで
は
clock
機能が 時にANSI Cプログラムを使用することができる方法です10 は、clock_t
とCLOCKS_PER_SEC
を浮動小数点または の整数にすることができます。
あなたの目的に適しているかどうかを検討することがあります。
CLOCKS_PER_SEC
はマクロで、通常はリテラルに展開されます。
glibc manualは言う:GNUシステムにおいて
を、clock_t長いINTと CLOCKS_PER_SECが整数値であると同等 あります。 しかし、他のシステムでは、clock_tと の両方のマクロCLOCKS_PER_SEC の型は、整数または 浮動小数点型のいずれかになります。上の例の のように、 プロセッサ時間の値をdoubleにキャストすると、 の演算がの演算が正常に機能し、 の演算が正常に機能していることが常に確認されます。
CLOCK_PER_SECは実際にはtime.hヘッダーの一部としてPOSIXによって指定されています。
それはsys/types.hで説明されているclock_tだと言います。
順番に言うこと:
のtime_tとclock_tが整数または 実浮動小数点型でなければなりません。
したがって、ポータブルコードでは、整数型または浮動小数点型であるとみなすことができます。値を格納する変数を宣言するだけであれば、それを "clock_t"として宣言してください。
これはTomalakが彼の答え(http://stackoverflow.com/questions/6129029/type-of-clocks-per-sec/6129078#6129078)で言及しているglibcマニュアルのアドバイスと同じです。 –
C99は関係ありません。この質問はC++に関するもので、この2つの間には関係がありません。 –
私は、Cの標準のどこで 'CLOCKS_PER_SEC'を*定数*式にする必要があるのかわかりません。 C99はそれを "clock_t型の表現"と呼んでおり、見かけ上意図的に "定数"という用語を省略している。問題は別の文脈でポップアップしました: 'CLOCKS_PER_SEC'が'#if'の下で使えるかどうか。標準では、 '#if'の下で使用できる整数定数式としての資格を持つオブジェクトのようなマクロが必要です。しかし、AFAIK 'CLOCKS_PER_SEC'は、一般的な場合には'#if'の下では使用できません。 – AnT