我正在将一些 C 代码移植到 TI DSP 芯片环境。我正在努力使用 C 编译器。
我有一个包含指向函数的指针的数据结构。我有一个初始化数据结构的函数。像这样的东西:
typedef void (*PFN_FOO)(int x, int y);
struct my_struct
{
PFN_FOO pfn;
};
init_struct(struct my_struct *p, void *pfn)
{
p->pfn = (PFN_FOO)pfn;
}
在 Visual Studio 和 GCC 下,这种代码可以毫无怨言地编译。事实上,因为pfn
参数是类型,所以void *
我什至不需要在其中进行强制转换;它只会无怨无悔地隐式施放。
在 TI DSP 芯片的 Code Composer Studio 中,我收到“警告:类型转换无效”
我的策略是让我的代码在没有警告的情况下编译,所以我想解决这个问题。我尝试了各种铸造。我发现如果我先将void *
指针转换为int
,然后将其转换为正确的类型,编译器会非常高兴。呃,呸!
我怎样才能在没有编译器抱怨的情况下进行这种转换?我真的必须强制int
关闭编译器吗?
注意:我特别不是在寻找“改变init_struct()
以接受 aPFN_FOO
而不是 a void *
”的效果的解决方案。这适用于这个简化的代码片段,但不适用于构建可能异构内容列表的实际代码。