使用XtPointer传递int是否安全?

时间:2009-12-11 14:26:48

标签: c motif

在Xt中定义回调proc时(例如XtTimerCallbackProc),client_data被指定为XtPointer。通过client_data而不是实际的指针传递一个int是安全的,然后将它转回到过程中吗?

例如:

void foo(void) {
   ...
   int data = 1;
   XtAppAddTimeout(app_context, 1000, timer_cb, data);
   ...
}

void timer_cb(XtPointer client_data, XtIntervalId *timer)
{
   int my_data = (int) client_data;
   ...
}

2 个答案:

答案 0 :(得分:2)

是; API使用指针,因为这种类型的大小是> =几乎所有计算机/编译器组合上的int的大小,因此您只需通过强制转换就可以使用它来传递除double之外的大多数内容。

答案 1 :(得分:1)

它应该是安全的,但您应该使用与指针大小相同的整数类型。

标准C99类型uintptr_t可用于此目的。

根据评论指出,使用此类型无法保证int-> ptr-> int。它应该比平常工作更多,但它不符合规范。

另一种方法是传递指针。如果您的应用是单线程的,您可能只是

static int data;并传递和数据。如果您的应用需要可重入,则malloc为int。

事实上,我不认为标准支持int-> ptr-> int以任何方式。