宏是这样的:
#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()
函数引起的?谢谢!