LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3295|回复: 5

[已解决]请教:(pid_t)-1表示什么意思?

[复制链接]
发表于 2008-1-4 00:04:15 | 显示全部楼层 |阅读模式
1、系统描述:
本人系统:FC6
内核: 2.6.20-1.2952.fc6
GCC版本: 4.1.1 20061011 (Red Hat 4.1.1-30)

2、问题描述:
pid_t不是一个类型吗?
在BLP的13章有这样的用法:直接把(pid_t)当作一个数来用;
小弟后来试了一下:
     .........
    printf("(pid_t) -1= %d\n",(pid_t)-1 );
    printf("(int)-1 = %d\n",(int)-1);
    printf("(char)-1 = %d\n",(char)-1);
    printf("(long)-1 = %d\n",(long)-1);
    printf("(pthread_t)-1 = %d\n",(pthread_t)-1);
   .............................

  输出:
(pid_t) -1= -1
(int)-1 = -1
(char)-1 = -1
(long)-1 = -1
(pthread_t)-1 = -1

看来GCC编译器认为(pid_t)这种用法,就当作一个数了,很显然这里"类型的值"=0,可是当我想不做算术操作,单独输出一个(pid_t)时编译就会报错,如下:
  .................
   printf("(pid_t)= %d\n",(pid_t) );               //line 19
  .................

这样用,编译报错:
pipe5.c: 在函数 ‘main’ 中:
pipe5.c:19: 错误:expected expression before ‘)’ token

这个难道是C99区别traditional C的新特性,请高人指点,谢谢
发表于 2008-1-4 00:11:00 | 显示全部楼层
(pid_t)-1是把 -1 转换成pid_t类型吧,强制类型装换。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-4 00:51:41 | 显示全部楼层
Post by biinn;1802914
(pid_t)-1是把 -1 转换成pid_t类型吧,强制类型装换。


啊,晕倒!~楼上的兄弟说的有道理阿,看书看傻了.......................
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-4 00:52:30 | 显示全部楼层
Post by biinn;1802914
(pid_t)-1是把 -1 转换成pid_t类型吧,强制类型装换。


太谢谢你的提醒了,:cool:
回复 支持 反对

使用道具 举报

发表于 2009-7-4 21:33:53 | 显示全部楼层
我晕。。。2楼的真是牛逼。。这样都可以。。
回复 支持 反对

使用道具 举报

发表于 2009-7-5 14:40:19 | 显示全部楼层
Post by a263238386;2003593
我晕。。。2楼的真是牛逼。。这样都可以。。


不会说话就闭嘴,没人把你当xx
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表