人。我在处理C中的pthread_create时遇到了一些麻烦:
以下是源代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
int main() {
int i = 0;
pthread_t thread;
pthread_create(&thread, NULL, &helper, &i);
pthread_join(thread, NULL);
printf("i is %d\n", i);
return 0;
}
void *helper(void *arg) {
int *num = (int *) arg;
*num = 2;
}
当我使用gcc编译它时,我得到了这种编译错误:
错误:使用未声明的标识符'helper' pthread_create(&amp; thread,NULL,&amp; helper,&amp; i);
有人可以告诉我如何处理最后两个论点吗?
答案 0 :(得分:1)
当您使用helper
(作为pthread_create()
的参数)时,编译器无法使用它的定义/声明。
将helper()
函数定义移到主函数之上,或为helper()
提供原型或声明。
此外:
1)演员阵容:
int *num = (int *) arg;
是不必要的。它可能只是:int *num = arg;
。
2)线程函数helper()
应该返回一个指针。除非您打算返回任何值,否则您可以这样做:
return NULL;
最后。这是Pthreads库所必需的。
答案 1 :(得分:0)
我认为有前瞻性声明的问题。在主要功能之前提出声明。
void *helper(void *arg);
或
在主函数上面定义函数。