[問題] 請問一行typedef

看板C_and_CPP作者 (皮爺)時間12年前 (2013/08/12 02:21), 編輯推噓4(4012)
留言16則, 8人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 呃...這應該不重要 問題(Question): 我在NeHeGL的範例中讀到一行碼長這樣 typedef int (*compfn)(const void*, const void*); 上網看其他人對於typedef的解釋,通常用在把某個type代換成好記的字 或是用來寫某個struct 不過這一行我看得實在是很霧煞煞 懇請鄉民好心解釋一下這一行在做什麼? 請假設原po是從Java國之類外地移民,對於C++完全不熟.... 謝謝 m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.238.47

08/12 02:25, , 1F
typedef OOO後 OOO hello相當於int (*hello)(const void..
08/12 02:25, 1F

08/12 02:26, , 2F
定義 compfn 為變數型態,
08/12 02:26, 2F

08/12 02:27, , 3F
其中的變數為一個 function pointer
08/12 02:27, 3F

08/12 02:28, , 4F
function pointer 所指的 function 雛型必須為
08/12 02:28, 4F

08/12 02:28, , 5F
int function(const void *, const void *)
08/12 02:28, 5F

08/12 02:30, , 6F
去查函數指標,網路教學通常會順便講fptr的typedef用法
08/12 02:30, 6F
謝謝 我嘗試把我的理解跟仍然不清楚的地方寫出來 typedef int (*compfn)(const void*, const void*); ↑ ↑ ↑這個括號裡頭裝該函數的傳入參數 │ └ 這是指向該函數的指標 └這是該函數回傳的型態 就是說可以用compfn宣告一個function的指標 它指向的function遵從上面寫的規則,這樣子? void* 是什麼? ※ 編輯: p52189 來自: 114.42.238.47 (08/12 02:46)

08/12 07:19, , 7F
void * 代表可以指向任何東西的指標
08/12 07:19, 7F

08/12 07:21, , 8F
然後是「括」(ㄎㄨㄛˋ)號
08/12 07:21, 8F
謝啦 ※ 編輯: p52189 來自: 140.138.150.181 (08/12 14:01)

08/12 16:08, , 9F
http://goo.gl/zBnMx3 括兩種發音都可以
08/12 16:08, 9F

08/12 21:20, , 10F
這個敘述的意思是 compfn 的型態是
08/12 21:20, 10F

08/12 21:22, , 11F
int (*)(const void*, const void*);
08/12 21:22, 11F

08/12 21:48, , 12F
看 typedef 掌握一個原則: 先把 typedef 拿掉看那是啥變數
08/12 21:48, 12F

08/12 21:49, , 13F
那這個 typedef 的意思就是這個名字會變成剛剛解釋的型態
08/12 21:49, 13F

08/12 21:49, , 14F
像這裡 typedef 拿掉後我們得到一個函式指標宣告
08/12 21:49, 14F

08/12 21:50, , 15F
所以這個 typedef 的意思是 compfn 就是這種函式指標
08/12 21:50, 15F

08/12 21:53, , 16F
"代換好記的字" xD 那是 MACRO 在做的
08/12 21:53, 16F
文章代碼(AID): #1I1zOT2q (C_and_CPP)