这是因为在你的代码中,你将指针类型 void*
强制转换为整数类型 int
造成了警告。这种警告发生是因为不同平台上的指针和整数类型可能具有不同的大小。
要解决这个问题,你可以使用 intptr_t
类型来保存指针值,并且在传递给线程函数时进行强制转换。下面是修改后的代码示例:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <pthread.h>
#include <stdint.h>
void *tfn(void *arg) {
intptr_t i = (intptr_t)arg;
sleep(i);
printf("--I am %ldth thread: pid=%d, tid=%lu\n", i + 1, getpid(), pthread_self());
return NULL;
}
int main(int argc, char *argv[]) {
intptr_t i;
int ret;
pthread_t tid;
for (i = 0; i < 5; i++) {
ret = pthread_create(&tid, NULL, tfn, (void*)i);
if (ret != 0) {
perror("pthread_create error");
exit(1);
}
}
sleep(i);
return 0;
}
通过使用 intptr_t
类型,我们可以确保在不同平台上指针和整数之间进行正确的转换。
内容由零声教学AI助手提供,问题来源于学员提问