long 和 unsigned long 的奇怪现象(实在无法解释)

BestSky 2009-03-03 10:07:28
static long clktck = 0;

if( clktck == 0 )
if( ( clktck = sysconf(_SC_CLK_TCK)) < 0 )
err_sys("sysconf error");

首先是运行上述代码想得到系统时钟频率,但是得到的值始终是0,后来将起改成
static unsigned long clktck = 0;

if( clktck == 0 )
if( ( clktck = sysconf(_SC_CLK_TCK)) < 0 )
err_sys("sysconf error");

居然就对了,取道了100的数值。很奇怪,本来100这么小,对于signed和unsigned应该一样才对。
然后简单写了个程序再测试

int main()
{
unsigned long a = 100;
long b = 100;
return;
}
这次更加奇怪,我在GDB中调试,运行到打印命令的时候,a的值为100,b的值为 8665408,十六进制为 0x843940,请问这个如何解释?这种情况瓦连续运行了两遍,所以,应该不是由于寄存器缓冲之类的原因把。
后来瓦将上述代码加了一句输出,如下,
int main()
{
unsigned long a = 100;
long b = 100;

printf("%ld\n\n%ld\n\n",a,b);
return;
}
这种现象又消失了。
这到底是怎么回事呢?
...全文
137 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
BestSky 2009-03-05
  • 打赏
  • 举报
回复
我今天重新执行的时候类似的情况也不能再现了,而且奇怪的是使用LONG取_SC_CLK_TCK也正常了,真奇怪阿
  • 打赏
  • 举报
回复
mark先
fox000002 2009-03-03
  • 打赏
  • 举报
回复
似乎没有 lz 所说的现象出现啊

(gdb) b 5
Breakpoint 1 at 0x40045c: file main.c, line 5.
(gdb) r
Starting program: main

Breakpoint 1, main () at main.c:6
6 }
(gdb) l
1 int main()
2 {
3 unsigned long a = 100;
4 long b = 100;
5 return;
6 }
(gdb) p a
$1 = 100
(gdb) p b
$2 = 100
(gdb)

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧