作者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/m.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