[問題] C nested-function
各位先進好,小弟在C上遇到一個關於nested-function的疑惑想請教
以下是jserv大在他的網頁中提到的一份sample code
typedef int (*func_t)(int);
static func_t(int arg) {
int nested(int nested_arg) {
return (arg + nested_arg);
}
return &nested;
}
int main()
{
{
func_t = f(0x1ab);
printf("%d\n", (*g)(20));
}
printf("%d\n", f(400)(27));
printf("%d\n", f(f(400)(27))(20));
return 0;
}
這樣單純傳value的nested-function是沒有問題的
小弟依樣畫葫蘆,做了一個傳function的版本,以下是小弟自己的code
typedef void (*ret_func)(void);
typedef void (*work_func)(void *data);
void show_a(void *data)
{
printf("This is show_a function\n");
}
void show_b(void *data)
{
printf("This is show_b function\n");
}
ret_func func_gen(work_func func)
{
void inside_func(void) {
printf("---------------\n");
(*func)(NULL);
printf("---------------\n");
}
return &inside_func;
}
int main()
{
ret_func ptr;
ptr = func_gen(&show_a);
(*ptr)();
return 0;
}
以上是小弟的sample,不過卻會直接的Segmentation fault
小弟想做的其實是動態將function再額外用另一個interface包起來
目的是不想讓更外層的人去使用到底層的interface,所以才想說用這種方式
不過並不是很清楚死掉的原因,還請先進給予指點 謝謝
忘了說明,我是在Linux底下使用gcc 4.8.2的結果
--
當你睜大眼睛卻發現自己什麼都看不見的時候,不要以為是自己瞎了
或許,前方真的一無所有
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.215.164
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1425644840.A.141.html
※ 編輯: godman362 (106.1.215.164), 03/06/2015 20:39:56
→
03/06 20:46, , 1F
03/06 20:46, 1F
→
03/06 20:46, , 2F
03/06 20:46, 2F
→
03/06 20:47, , 3F
03/06 20:47, 3F
→
03/06 20:48, , 4F
03/06 20:48, 4F
→
03/06 20:48, , 5F
03/06 20:48, 5F
→
03/06 20:48, , 6F
03/06 20:48, 6F
→
03/06 20:49, , 7F
03/06 20:49, 7F
→
03/06 20:50, , 8F
03/06 20:50, 8F
※ 編輯: godman362 (106.1.215.164), 03/06/2015 20:54:41
※ 編輯: godman362 (106.1.215.164), 03/06/2015 20:55:33
→
03/06 20:57, , 9F
03/06 20:57, 9F
→
03/06 20:57, , 10F
03/06 20:57, 10F
→
03/06 20:58, , 11F
03/06 20:58, 11F
→
03/06 20:58, , 12F
03/06 20:58, 12F
→
03/06 21:26, , 13F
03/06 21:26, 13F
→
03/06 22:21, , 14F
03/06 22:21, 14F
推
03/06 22:27, , 15F
03/06 22:27, 15F
→
03/06 22:46, , 16F
03/06 22:46, 16F
→
03/06 22:47, , 17F
03/06 22:47, 17F
→
03/06 22:47, , 18F
03/06 22:47, 18F
推
03/07 16:30, , 19F
03/07 16:30, 19F
推
03/07 16:40, , 20F
03/07 16:40, 20F
→
03/07 16:41, , 21F
03/07 16:41, 21F
→
03/07 20:48, , 22F
03/07 20:48, 22F
→
03/07 20:50, , 23F
03/07 20:50, 23F
推
03/08 01:55, , 24F
03/08 01:55, 24F
推
03/08 01:59, , 25F
03/08 01:59, 25F
→
03/08 02:02, , 26F
03/08 02:02, 26F
→
03/08 02:15, , 27F
03/08 02:15, 27F
→
03/08 02:20, , 28F
03/08 02:20, 28F
→
03/08 02:22, , 29F
03/08 02:22, 29F
→
03/08 04:07, , 30F
03/08 04:07, 30F
→
03/08 08:01, , 31F
03/08 08:01, 31F
→
03/08 08:02, , 32F
03/08 08:02, 32F
→
03/08 08:03, , 33F
03/08 08:03, 33F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章