有关李白的资料:关于c语言编程的遇到的一个奇怪问题

来源:百度文库 编辑:高考问答 时间:2024/05/07 09:01:49
这是一个测试cpu主频的程序,在linux编译下运行。问题是:如果把main函数单独做一个c文件然后两个源文件一起编译得到的结果就会不一样,但是整到一起就会得到正确的结果,很诡异。哪位大侠能帮我看看阿,谢谢了。

static unsigned o_high = 0;
static unsigned o_low = 0;

void get_count (unsigned *high, unsigned *low)
{
asm("rdtsc; movl %%edx, %0; movl %%eax, %1;"
:"=r"(*high), "=r"(*low)
:
:"%edx","%eax");

printf("%u,%u\n",*high,*low);
}

void start_count ()
{
get_count(&o_high, &o_low);
}

double end_count ()
{
double result = 0;
unsigned n_high = 0;
unsigned n_low = 0;

get_count(&n_high, &n_low);

int borrow = n_low < o_low;
n_high = n_high - borrow - o_high;
// n_low -= o_low;

result =(double) n_high * (1<<31) * 2 + (double)(n_low - o_low);
printf("%f\n",result);
return result;

}
/////////////////////////////////////////////////////////////
int main ()
{
double show;

start_count();
sleep(1);
show = end_count();

printf("%.1f\n",show);
return 0;
}
////////////////////////////////////////////////////////////////
谢谢热心回答,原因:在c中如果非同一个文件的函数的函数返回值不是int,就必须显示声明出来。所以该添加一句在main调用那个函数前添加double end_count();

好象你两个文件之间没有连接啊,这样编译不是无效调用吗?
我不太清楚,学的C++,只是说下而已,大家相互讨论可以吧,呵呵