typedef函数指针->从不兼容的指针类型初始化

瑞娜

我在理解此警告的原因时遇到了麻烦:

menu-file-select.c:41:29: warning: initialization from incompatible pointer type

令人反感的代码是:

typedef int (*FileSelectFilter)(const char*, struct dirent*);

typedef struct {
    const char *dir; //the directory path to read
    const char *out; //where to copy the selected path
    int outLen; //length of out buffer
    FileSelectFilter *filter; //optional filter function
} FileSelectParams;

void showFileSelectMenu(FileSelectParams *params) {
    /* ... */
    FileSelectFilter filter = params->filter; // <-- warning generated here.
    if(filter && !filter(path, ent)) continue;
    /* ... */
}

int main(int argc, char **argv) {
    /* ... */
    FileSelectParams fsel = {
        .dir    = setting.lastpath,
        .out    = RomPath,
        .outLen = sizeof(RomPath) - 1,
        .filter = FileSelectFilter_Roms,
    };
    showFileSelectMenu(&fsel);
    /* ... */
}

int FileSelectFilter_Roms(const char *path, struct dirent *file) {
    /* ... */
}

据我所知,FileSelectFilter_Roms匹配FileSelectFiltertypedef,所以我不明白为什么我被告知类型不兼容。该程序似乎仍然可以运行,但是在这里出现此警告使我感到困扰。

伊塞捷夫

您已FileSelectFilter在typedef中定义为指向函数的指针:

typedef int (*FileSelectFilter)(const char*, struct dirent*);

在中FileSelectPararms,您将filter成员定义为:

FileSelectFilter *filter;

这意味着它filter实际上是指向函数的指针。这就是为什么您在分配中出错的原因FileSelectFilter filter = params->filter;

filter成员应简单定义为:

FileSelectFilter filter;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何解决:从不兼容的指针类型初始化

从不兼容的指针类型(指向函数的指针)进行初始化

警告:从不兼容的指针类型初始化-如何初始化包含函数指针的结构体数组

当函数将数组作为参数时,C“警告:从不兼容的指针类型初始化”

数组指针编译时间警告:警告:从不兼容的指针类型初始化

指针数组中的警告“从不兼容的指针类型初始化”

分配给指针时从不兼容的指针类型警告进行初始化

从不兼容的指针类型获取初始化的上下文

警告:从不兼容的指针类型初始化 [-Wincompatible-pointer-types]

proc_dir_entry警告:从不兼容的指针类型初始化[默认启用]

“从不兼容的指针类型初始化”警告。我不明白原因

Typedef函数与函数指针

C中的指针函数:来自不兼容指针类型的foo初始化

初始化指向结构的指针时类型不兼容

NSComparator错误:不兼容的块指针类型初始化

初始化'Method *'C的不兼容指针类型

C:不兼容的指针类型初始化

Typedef函数指针?

C函数指针和typedef

函数指针 IAR ( typedef void )

初始化指向 typedef 结构的指针

不兼容的指针类型使用'UITextField *'类型的表达式初始化'NSString *'

从不兼容的指针类型传递

C 指针:从不兼容的指针类型赋值

定义结构的向量并将其作为C中的指针传递-错误:来自不兼容指针类型的初始化

数组初始化时不兼容的指针类型

指向结构的函数的指针,指向typedef的函数的指针

Typedef函数指针有替代语法吗?

C 中的 typedef 和函数指针