void值未如预期地被忽略

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了void值未如预期地被忽略相关的知识,希望对你有一定的参考价值。

/*
* * main.c :description copyright : (C) by zhanghonglie Function :
* 利用管道实现在在线程间传递整数
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
void task1(int *); // 线程1执行函数原型
void task2(int *); // 线程2执行函数原型
void task3();//线程3执行函数原型
int pipe1[2],pipe2[2];// 存放第两个无名管道标号
pthread_t thrd1,thrd2,thrd3;// 存放第两个线程标识
int x,y,z;
int main(int argc,char *arg[])

int ret;
int num1,num2; // 使用pipe()系统调用建立两个无名管道。建立不成功程序退出,执行终止
if(pipe(pipe1) < 0)
perror("pipe1 not create");
exit(EXIT_FAILURE);

if(pipe(pipe2) < 0)
perror("pipe2 not create");
exit(EXIT_FAILURE);

// 使用pthread_create系统调用建立两个线程。建立不成功程序退出,执行终止
num1 = 9 ;
ret = pthread_create(&thrd1,NULL,(void *) task1,(void *) &num1);
if(ret)
perror("pthread_create: task1");
exit(EXIT_FAILURE);

num2 = 10 ;
ret = pthread_create(&thrd2,NULL,void *) task2,(void *) &num2);
if(ret)
perror("pthread_create: task2");
exit(EXIT_FAILURE);

ret = pthread_create(&thrd3,NULL,(void *) task3,NULL);
if(ret)
perror("pthread_create: task2");
exit(EXIT_FAILURE);

// 挂起当前线程切换到thrd2线程
pthread_join(thrd2,NULL);
// 挂起当前线程切换到thrd1线程
pthread_join(thrd1,NULL);

pthread_join(thrd3,NULL);

exit(EXIT_SUCCESS);


// 线程1执行函数,它首先向管道写,然后从管道读
void task1(int *num)
//int x=*num;
int fx=0;
if(*num==1)
fx=1;
else
x=*num-1;
fx=*num*task1(&x);

//printf("thread%d read: %d\n",*num,x++);
//write(pipe1[1],&x,sizeof(int));
//read(pipe2[0],&x,sizeof(int));

if(*num==9)
write(pipe1[1],&fx,sizeof(int));
// 读写完成后,关闭管道
close(pipe1[1]);
//close(pipe2[0]);
// 线程2执行函数,它首先从管道读,然后向管道写
void task2(int * num)
//int y=*num;
int fy;
// 每次循环从管道1的0端读一个整数放入变量X中,
// 并对X加1后写入管道2的1端,直到X大于10
if(*num==1||*num==2)
fy=1;
else

y=*num-1;
z=*num-2;
fy=task2(&y)+task2(&z);
//read(pipe1[0],&x,sizeof(int));
//printf("thread2 read: %d\n",x++);
//write(pipe2[1],&fy,sizeof(int));
// 读写完成后,关闭管道
if(*num==10)
write(pipe2[1],&fy,sizeof(int));
//close(pipe1[0]);
close(pipe2[1]);

void task3()
int fxy,fx,fy;
read(pipe1[0],&fx,sizeof(int));
read(pipe2[0],&fy,sizeof(int));
fxy=fx+fy;
printf("f(x,y)= %d\n",fxy);
close(pipe1[0]);
close(pipe2[1]);


编译后 出现
tipe1.c: 在函数‘task1’中:
tipe1.c:64: 错误: void 值未如预期地被忽略
tipe1.c: 在函数‘task2’中:
tipe1.c:87: 错误: void 值未如预期地被忽略
tipe1.c:87: 错误: void 值未如预期地被忽略
是什么原因啊?
void 值未如预期地被忽略
是一种什么错误啊?为什么会出现这种错误?

参考技术A 返回值错误,记得线程函数的返回值应该是void*,而不是void,改了试试,兄弟。

以上是关于void值未如预期地被忽略的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionViewFlowLayout 忽略不同高度项目的部分插图 - 错误还是预期?

错误:不应忽略 void 值 - C/GTK+

计算实际停机时间,忽略日期/时间的重叠

Angular 隐藏忽略

为啥过滤统计信息被忽略

DateTime.ParseExact,忽略时区