【发布时间】:2013-04-06 16:38:26
【问题描述】:
更具体地说,如果我有以下函数指针类型:
typedef void (*callback_type) (intptr_t context, void* buffer, size_t count);
我可以安全且没有“未定义的行为”吗:
callback_type func_ptr = (callback_type)write;
intptr_t context = fd;
func_ptr(context, some_buffer, buffer_size);
?
其中write() 是系统调用(编辑:具有签名ssize_t write(int fd, const void *buf, size_t count);,因此将int 作为第一个参数),fd 是int 文件描述符。我假设 C 和 C++ 的答案是相同的,所以我标记了两者。
【问题讨论】:
-
你所问的似乎与标题所问的相反。编辑:啊,
write系统调用需要int。 -
好吧,
context的类型是intptr_t,并且正在传递给write,它需要int。对我来说似乎是正确的...... -
嗯?目前,您将
intptr_t传递给需要intptr_t的函数。那么问题出在哪里?您担心的部分是什么?从&write到callback_type的转换,从fd到intptr_t的转换还是别的什么? -
@lvella 你没有解释
write将int作为它的第一个参数。func_ptr的分配是否正确编译?如果是这样,那么intptr_t在你的机器上必须是int,不是吗? -
@sftrabbit:分配涉及重新解释转换,因此无论转换是否有效,它都会编译。如果
intptr_t不是int,您将获得未定义的行为。
标签: c++ c callback function-pointers