我有下面的代码。
static void dmaCallbackHandler(tSOME_ENUM channel)
{
switch(channel)
{
case blabla:
//do some stuff
}
func();
}
然后下面有几行代码,我有一个函数返回上面函数的地址, 我从另一个.c文件中调用这个函数(_test_getDmaCallbackHandler)。
uint32* _test_getDmaCallbackHandler(void)
{
return &dmaCallbackHandler;
}
然后我收到一个警告,内容如下:
warning: returning 'void (*)(tSOME_ENUM)' {aka 'void (*)(enum <anonymous>)'}
from a function with incompatible return type 'uint32 *'
{aka 'unsigned int *'}
[-Wincompatible-pointer-types]
472 | return &dmaCallbackHandler;
我怎样才能消除这个警告?
编译器说:你指定的返回类型为 uint32_t*
然后以函数指针的形式传递给它一个完全不相关的类型,这一点也不兼容。
所以看来,你的代码应该改成这样。
typedef void dma_callback_t (tSOME_ENUM channel);
...
dma_callback_t* _test_getDmaCallbackHandler(void)
{
return dmaCallbackHandler;
}