pid_t 是哪一种数据类型,pthread_t是哪一种数据类型,如何打印不产生警告?

jackxiang 2015-3-20 10:47 | |
一)进程ID:
pid_t 是那一种数据类型:
是Linux下的进程号类型,也就是Process ID _ Type 的缩写。 其实是宏定义的unsigned int类型,
warning: format ‘%u’ expects type ‘unsigned int’, but argument 2 has type ‘pthread_t’:
使用%lu打印pthread_t不会出现警告。

二)线程ID:
编译时如果使用%x打印pthread_t会出现警告信息:
thread-pool.c:77: warning: format ‘%x’ expects type ‘unsigned int’, but argument 3 has type ‘pthread_t’

如果使用%lu打印pthread_t不会出现警告。



如:
问题一,对宏定义的返回数据类型作出一个定义,如下面是对进程数作定义:


问题二:对pid_t进程号用printf打印出现警告:
pid_t p;
pthread_t t;
printf("\nthread id is %lu,procees id is %lu,waiting for into while...\n",t,p);
format ‘%lu’ expects type ‘long unsigned int’, but argument 3 has type ‘pid_t’  
这PID pthread_t打印用啥格式?
: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘pthread_t’
: warning: format ‘%ld’ expects type ‘long int’, but argument 3 has type ‘pid_t’
: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘pthread_t’
如果打印pid_t这种类型,你知道它是整数,但是不知道具体类型,而且在不同平台也可能不同

一般做法是强转下:"%lld", (long long)xxx
或者"%llu", (unsigned long long)xxx
因为C的整数最大就是long long

实践Ok代码如下:



作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/7883/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2015-3-20 10:55
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]