demo1.c: In function ‘func1’: demo1.c:9:2: warning: return makes pointer from integer without a cast [enabled by default] demo1.c: In function ‘main’: demo1.c:17:2: error: ‘parm’ undeclared (first use in this function) demo1.c:17:2: note: each undeclared identifier is reported only once for each function it appears in demo1.c:17:2: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default] /usr/include/pthread.h:225:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘int *’
时间: 2024-02-05 21:05:22 浏览: 120
这些错误和警告是由于你的代码中存在一些问题:
1. 在 func1 函数中,你返回了一个指针类型,但是函数定义中的返回值类型是 void*,需要将返回值强制转换为 void* 类型。
2. 在 main 函数中,你使用了一个未声明的变量 parm,导致编译出错。
3. 在调用 pthread_create 函数时,第三个参数的类型应该是 void* (*)(void *),即指向函数的指针类型,但是你传递的是 int* 类型的指针,需要进行类型转换。
修改后的代码如下所示:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *func1(void *arg)
{
int *p = (int *)arg;
printf("Thread %d is running.\n", *p);
pthread_exit(NULL);
}
int main()
{
pthread_t tid;
int i = 1, ret;
ret = pthread_create(&tid, NULL, func1, &i);
if (ret != 0) {
printf("Create thread error!\n");
exit(1);
}
pthread_join(tid, NULL);
printf("Thread %d exit.\n", tid);
return 0;
}
```
请注意,为了避免出现警告或错误,我们对代码进行了一些修改。
阅读全文