今天做线程的例程出现warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]的警告
编译结果:
问题解决
step0
在网站https://stackoverflow.com/questions/9251102/warning-cast-to-pointer-from-integer-of-different-size-wint-to-pointer-cast查了相关问题虽然文中并没给出我要的答案但是受到启发.
step1
前面我在类里面定义
int m_clientfd
这里由于
pthread_create
函数的原因需要强制转换
void *
对于初学者来说类型的转来转去本来就容易晕.
step2
我们从这句警告入手warning: cast to pointer from integer of different size 警告的大概意思是整型和指针具有不同的大小,也就是说我的强制类型转换存在不同size的转换.
step3
经过sizeof(void *) 和 sizeof(int)的输出它们的大小分别为8和4(不同的操作系统不一样)所以编译后才出现int 到 (void *)转换大小不匹配.
step4
虽然上面的连接中给出了解决方案但我觉得都不太好,我的解决方式很简单就是把前面定义的
int m_clientfd
改为
long m_clientfd
这样两者类型的大小都是8.再次编译完美解决.
step5
在强制类型转换这一块,以后遇到类似的警告就可以首先从类型的大小转换开始考虑
今天做线程的例程出现warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]的警告编译结果:问题解决0 在网站https://stackoverflow.com/questions/9251102/warning-cast-to-pointer-from-integer-of-differe...
在多线程编程中使用
thread_start(pthread_t * thread_id, THREAD_BODY * thread_workbody, void *thread_arg);
创建子线程时因为最后一个参数需要是指向子线程的文件描述符(int类型)的指针,因此调用时我们会将文件描述符强转为(void *)类型,可能是系统不同的原因在int类型强转为void类型指针会出现:
警告
warning
:
cas
t to
point
er
from
integer
of
diff
erent
size
[-
Win
t-to-
point
er
-
cas
t]
void *tfn(void *arg)
int i;
i = (int)arg;
sleep(i); //通过i来区别每个线程
printf(“I’m %dth thread, Thread_ID = %lu\n”, i+1, pthread_self());
return NULL;
int main(int arg
warning
:
cas
t to
point
er
from
integer
of
diff
erent
size
[-
Win
t-to-
point
er
-
cas
t]错误
今天在编写多线程程序的时候,编译过程中出现了如下错误:
thread.c: In function ‘main’:
thread.c:38:57:
warning
:
cas
t to
point
er
from
integer
of
diff
erent
size
[-
Win
t-to-
point
er
-
cas
t]
后来google了,受这个问题
解决
的启发http://stackov
er
flow.
将int变量转为(void*)时出现错误
er
ror:
cas
t to
point
er
from
integer
of
diff
erent
size
[-W
er
ror=int-to-
point
er
-
cas
t]
这是由于int类型为32位,指针为long long 64位
解决
方法:(void*)(intptr_t)...
解释一下和这个报错
warning
:
cas
t to
point
er
from
integer
of
diff
erent
size
[-
Win
t-to-
point
er
-
cas
t]
警告
warning
:
cas
t from
point
er
to
integer
of
diff
erent
size
[-W
point
er
-to-int-
cas
t]
int *ret[5];
printf("-------%d 's ret = %d\n", i, (int)ret[i]);
出现类型转换警告
printf("-------%d 's ret = %ld\n", i,(intptr_t )(int *)ret[i]);
【最新原创毕设】基于Express的线上教育系统+28282(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案