マクロは次のようになります。
#define MAX 10000000
#define CNT 1000000
#define TIMER_INIT \
clock_t starttime, endtime; \
#define TIMER(txt, process) \
starttime = clock(); \
process; \
endtime = clock(); \
printf("%-20s %20ld\n", \
txt, (endtime - starttime))
メインコードは次のとおりです。
char vector2[CNT/8 + 1];
TIMER( "bitsort",
for(i = 0; i < CNT; ++i)
set1(rand() % MAX, vector2));
そして、set1関数は次のようになります。
void set1(int pos, char* vector) /* set the position to 1 */
{
vector[pos/8] |= (0x1 << pos%8);
}
プログラムを実行すると、出力は次のようになります。
bitsort -36035411302143896
私がこのように違いをキャストしたとしてもunsigned int
、それはまだ機能しません:
#define TIMER(txt, process) \
starttime = clock(); \
process; \
endtime = clock(); \
printf("%-20s %20d\n", \
txt, (unsigned int)(endtime - starttime))
出力はbitsort -16766097
に変更しようとしまし%ld
た%d
が、機能しません。
しかし、次のように、パラメーターで使用しない場合for
は、次のようになります。
TIMER("bitsort", set1(rand() % MAX,vector2));
完璧にTIMER
動作し、合理的な結果が得られます。
誰かが私のコードの何が問題になっているのか考えていますか?マクロによるものですか、それともclock()
機能によるものですか?ありがとう!