実行時間の計測

UNIX でプログラムの実行時間を計測するには,getrusage を使うのが基本ですが*1Windows では使うことができません.代わりに Windows では QueryPerformanceCounter を使うが定番です*2
そこで下記のような関数を用意しておくと便利です.

#ifdef WIN32
#include 
double get_usage_sec()
{
    LARGE_INTEGER time, freq;

    QueryPerformanceCounter(&time);
    QueryPerformanceFrequency(&freq);

    return static_cast(time.QuadPart) / freq.QuadPart;
}
#else
#include 
#include 
double get_usage_sec()
{
    struct rusage rusage;

    getrusage(RUSAGE_SELF, &rusage);

    return rusage.ru_utime.tv_sec + (double)rusage.ru_utime.tv_usec*(1e-6);
}
#endif

c_count

C/C++ソースコードの行数をカウントしてくれるC_COUNT – C/C++ Line Counter という便利なツールを発見.コードやコメントの割合など,wc では分からない情報を知ることができます.

ためしに自作ソフトに対してかけてみたらこんな感じになった.

% find . -type f -name '*.cpp' -o -name '*.h' |xargs c_count
(snip)
  5339  lines had comments        25.3 %
   149  comments are inline       -0.7 %
  3599  lines were blank          17.1 %
  1576  lines for preprocessor     7.5 %
 10699  lines containing code     50.8 %
 21064  total lines              100.0 %

106835  comment-chars             15.7 %
 79632  nontext-comment-chars     11.7 %
175837  whitespace-chars          25.8 %
 32006  preprocessor-chars         4.7 %
285995  statement-chars           42.0 %
680305  total characters         100.0 %

 32036  tokens, average length 7.43

Apache はこんな感じ.

 64042  lines had comments        24.0 %
  5833  comments are inline       -2.2 %
 34373  lines were blank          12.9 %
 20890  lines for preprocessor     7.8 %
153059  lines containing code     57.4 %
266531  total lines              100.0 %

1758042 comment-chars             20.7 %
258628  nontext-comment-chars      3.0 %
2487567 whitespace-chars          29.3 %
408627  preprocessor-chars         4.8 %
3585463 statement-chars           42.2 %
8498327 total characters         100.0 %

421010  tokens, average length 7.01

空行がやや多い以外は Apache とほとんど同じっぽい.