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は無視される"らしい。???

そういえば、コンパイラのバージョンやビット数をIDEから確認する方法も、まだわかってないです。