编译Unix高级编程源代码出现的格式warning

来源:互联网 发布:泰格至尊软件说明书 编辑:程序博客网 时间:2024/05/22 09:49

      今天在编译Unix高级编程源代码,在make后报警告: 格式 ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘pthread_self’ [-Wformat]


     经过查找资料,pthread_self()是POSIX标准的实现,它的返回值是pthread_t,pthread_t在Linux中实际是无符号长整型,即unsigned long。我把‘%d’改为%ld’后警告解决。

#include "apue.h"#include <pthread.h>struct foo {        int a, b, c, d;};voidprintfoo(const char *s, const struct foo *fp){        printf(s);        printf("  structure at 0x%x\n", (unsigned)fp);        printf("  foo.a = %d\n", fp->a);        printf("  foo.b = %d\n", fp->b);        printf("  foo.c = %d\n", fp->c);        printf("  foo.d = %d\n", fp->d);}void *thr_fn1(void *arg){        struct foo      foo = {1, 2, 3, 4};        printfoo("thread 1:\n", &foo);        pthread_exit((void *)&foo);}void *thr_fn2(void *arg){        printf("thread 2: ID is %ld\n", pthread_self());        pthread_exit((void *)0);}intmain(void){        struct foo      foo = {1, 2, 3, 4};        printfoo("thread 1:\n", &foo);        pthread_exit((void *)&foo);}void *thr_fn2(void *arg){        printf("thread 2: ID is %ld\n", pthread_self());        pthread_exit((void *)0);}intmain(void){        int                     err;        pthread_t       tid1, tid2;        struct foo      *fp;        err = pthread_create(&tid1, NULL, thr_fn1, NULL);        if (err != 0)                err_quit("can't create thread 1: %s\n", strerror(err));        err = pthread_join(tid1, (void *)&fp);        if (err != 0)                err_quit("can't join with thread 1: %s\n", strerror(err));        sleep(1);        printf("parent starting second thread\n");        err = pthread_create(&tid2, NULL, thr_fn2, NULL);        if (err != 0)                err_quit("can't create thread 2: %s\n", strerror(err));        sleep(1);        printfoo("parent:\n", fp);        exit(0);}


0 0
原创粉丝点击