【发布时间】:2011-10-05 04:33:16
【问题描述】:
我正在尝试将一些旧的 32 位代码转换为 64 位。我收到的更常见的警告之一是:
警告:指针转换为不同大小的整数
当一个函数调用pthread_create 时会发生这种情况,该函数接受一个 void * 来将数据传递给新线程。调用线程将 void * 放入一个枚举(因此 64 位的大小不匹配)。代码如下:
typedef enum {
zero,
one,
two
}numbers_e;
some_function(...)
{
numbers_e mydata=zero;
...
pthread_create(..., (void *)mydata);
...
}
我设法克服了这个警告:
pthread_create(..., (void *)0 + my_data);
此解决方案非常难看(我正在考虑是否最好将警告保留原样,并在使用它的代码附近加上一个很大的注释)。还有其他解决方案吗?
【问题讨论】:
-
问题是您将非指针数据作为参数传递给需要指针的函数。您应该按照函数签名的建议传递一个指向数据的指针,并像在函数中适当地访问它一样访问它(如果它是您的代码)。
-
@jeff Mercado:我不是我的代码...
-
我知道 pthread_create() 函数本身不是您的代码,但您传入的函数应该将参数作为指针访问。一般情况下你应该做的事情。
-
@Jeff Mercado:我同意这首先是不好的用法。但是:新的线程函数不是我要更改的。
标签: c casting pthreads 32bit-64bit porting