clock関数とかstrlen関数とか。size_tがわからない(C学習中)
今日覚えたこと
clock関数
起動からのクロック数を求める。
- 戻り値から秒を求めるには、CLOCKS_PER_SECで割る
- 戻り値のclock_tは、何らかの算術型の同義語として定義される
- 手元の環境では、typedef long clock_t
- エラーのときは、-1をclock_t型にキャストした値が返る
ある処理の前後で呼び出して、後の値から前の値を引けば、実行時間を計測できる。しかし、代入する値がclock_t型で表現できる値を超えると、オーバーフローを起こす。
typedef
既存の型aの同義語として型bを宣言するとき、型bの変数を宣言する際には、結果が同じでも型aではなく型bを使った方がよい。これは、コードの可搬性、保守性を守るため。型bが型aではなく、既存の型cと関連づけられている環境を考慮する。
strlen関数
引数が指す文字列の長さを返す。
Visual C++ 2010 Express の使い方
右クリック → [定義へ移動]で、標準関数のコードに飛べる。
実際のファイルは、ヘッダファイルなら C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include に格納されている。
わかったような、わからないようなこと
strlenの戻り値であるsize_t型について。
手元の環境の場合、size_tは、sourceanotations.hで次のように定義されている。
#define _W64 __w64 (中略) #ifndef _SIZE_T_DEFINED #ifdef _WIN64 typedef unsigned __int64 size_t; #else typedef _W64 unsigned int size_t; #endif #define _SIZE_T_DEFINED #endif
この_W64って何? "Visual C++ 64-bit コンパイラが使われていない場合、__w64は無視される"らしい。???