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 值未如预期地被忽略
是一种什么错误啊?为什么会出现这种错误?
以上是关于void值未如预期地被忽略的主要内容,如果未能解决你的问题,请参考以下文章