作者drunknmunky ()
看板LinuxDev
标题[问题] incompatible pointer warning
时间Fri Jan 26 16:21:45 2018
在64bits环境下编译
static struct class *new_class;
static char *set_devnode(struct device *dev, mode_t *mode)
{
return NULL;
}
new_class = class_create(THIS_MODULE, DRV_NAME);
new_class->devnode = set_devnode;
==================================
会一直出现 warning: assignment from incompatible pointer type
[-Wincompatible-pointer-types]
上网查了 devnode
struct class {
...
char *(*devnode)(struct device *dev, mode_t *mode);
...
};
我的认知这不就是把 (char * )塞给 (char *)
我也尝试过casting: new_class->devnode = (char *)set_devnode;
或者将 static char *set_devnode 宣告成 char *set_devnode
但是都有相同结果@@
可以请教这个问题是我忽略了什麽吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.250.205.229
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/LinuxDev/M.1516954908.A.217.html
1F:→ hizuki: 第一你C语言要重新看,pointer to function的type不是那样 01/26 16:55
2F:→ hizuki: 第二上面的代码是无误的才对,请贴出包括编译小稿部分 01/26 16:56
3F:→ drunknmunky: 哈罗 你指的是function pointer吗?我对过都一致啊@@ 01/26 17:12
4F:→ drunknmunky: 因为没办法我才乱改试试看 01/26 17:12
5F:→ james732: new_class = (struct class *)class_create( .... 01/26 19:27
6F:→ james732: 或者 static struct class *set_devnode(struct device 01/26 19:28
7F:→ hizuki: 一是说你描述不对,不是a pointer a char type. 二是指头 01/27 04:44
8F:→ hizuki: 文件可能指定错了 01/27 04:44
9F:→ maydaychaaaa: 要 header file include 的问题 01/27 21:16
10F:推 yvb: 你的 kernel version 是 3.3 之前吗 ? linux-3.3 以後是 01/29 12:22
11F:→ yvb: char *(*devnode)(struct device *dev, umode_t *mode); 01/29 12:22
12F:→ yvb: ^^^^^^^ 01/29 12:24
感谢楼上帮忙回答的大大
因为是kernel 3.3後
如yvb大大所言 定义变了
更改过已经OK了
※ 编辑: drunknmunky (60.250.205.229), 01/30/2018 19:42:17