我用pthread_join函數在昨天遇到了問題,它出現complie錯誤,我在網上搜索很久,但沒有解決它。爲什麼不能用**來得到pthread_join的返回值
pthread_join.c
#include <stdio.h>
#include <pthread.h>
void* say_hello(void* args)
{
printf("hello from thread\n");
pthread_exit((void*)1);
}
int main()
{
pthread_t tid;
int iRet=pthread_create(&tid,NULL,say_hello,NULL);
if(iRet)
{
printf("pthread create error:iRet=%n\n",iRet);
return iRet;
}
void *retval;
iRet=pthread_join(tid,&retval);
if(iRet)
{
printf("pthread_join error:iRet=%d\n",iRet);
return iRet;
}
printf("retval=%ld\n",(long)**(&retval));
// printf("retval=%ld\n",(long)retval);
return 0;
}
$ error:invalid use of void expression
我嘗試使用(&retval)
獲得的pthread_join
返回值。我覺得retval屬於void **,那麼我使用(retval)應該可以得到值,但是失敗了。我不能用void來獲取**指針的值,我估計retval是值通過pthread_join,但如果使用** retval來獲取它,不能成功。
我用gcc編譯它,它會顯示:
$ error:invalid use of void expression
使用'的printf( 「RETVAL =%LD \ n」,(長)RETVAL));'或'的printf(「RETVAL =%d \ n「,(int)retval));' – alk