这句函数声明式我没看明白

幻夢之葉 2016-06-07 01:25:46
SGI STL中stl_alloc.h中的一个函数


static void (* __malloc_alloc_oom_handler)();

static void (* __set_malloc_handler(void (*__f)()))() //这句函数原型
{
void (* __old)() = __malloc_alloc_oom_handler;
__malloc_alloc_oom_handler = __f;
return(__old);
}

求分析的方法和过程,为何返回值是 void (*)()
...全文
138 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻夢之葉 2016-06-07
  • 打赏
  • 举报
回复
引用 5 楼 lm_whales 的回复:
static void ( * __set_malloc_handler(void (*__f)()) )() 红色部分是返回值类型 粉红部分 函数形参表 黑体字部分,函数名 和函数定义的括号 函数名前面的星号,也是函数返回值类型的一部分
好的,感谢,我再自行体会下。 跟typedef过的用法好像有挺大的区别
lm_whales 2016-06-07
  • 打赏
  • 举报
回复
static void ( * __set_malloc_handler(void (*__f)()) )() 红色部分是返回值类型 粉红部分 函数形参表 黑体字部分,函数名 和函数定义的括号 函数名前面的星号,也是函数返回值类型的一部分
幻夢之葉 2016-06-07
  • 打赏
  • 举报
回复
引用 2 楼 lm_whales 的回复:
指针(函数指针,对象指针)也是一种对象 声明中 去掉 对象名,就是这个声明中声明的对象类型 存储类型,一般是附加的额外信息, 并不是类型信息的一部分。 static void (* __malloc_alloc_oom_handler)(); __malloc_alloc_oom_handler的类型是 void (* )(); static void (* __set_malloc_handler(void (*__f)()))() 参数是 void (*__f)() 参数类型是 void (*)() 函数是 void (* __set_malloc_handler(void (*__f)()))() 函数类型(返回值类型)是 void (*)();
引用 1 楼 pengzhixi 的回复:

typedef  void (*FUN_PTR)();
static FUN_PTR   __set_malloc_handler(FUN_PTR)
像一般来说有参数的式子不是如同以下么 void (*Func)(int) 这样子的么 在我理解的以上作用的原型大概如下 static void (*)() ( *__set_malloc_handler) (void (*__f)()) 就是他那样子位置让我很是茫然,搞不懂那个返回值类型 我试着再分析下,你们看看对不对 static void ( * __set_malloc_handler(void (*__f)()) )() 红色代表的是返回值?
lm_whales 2016-06-07
  • 打赏
  • 举报
回复
这个函数定义太复杂,说不定有的编译器 都不接受这种定义方式
lm_whales 2016-06-07
  • 打赏
  • 举报
回复
指针(函数指针,对象指针)也是一种对象 声明中 去掉 对象名,就是这个声明中声明的对象类型 存储类型,一般是附加的额外信息, 并不是类型信息的一部分。 static void (* __malloc_alloc_oom_handler)(); __malloc_alloc_oom_handler的类型是 void (* )(); static void (* __set_malloc_handler(void (*__f)()))() 参数是 void (*__f)() 参数类型是 void (*)() 函数是 void (* __set_malloc_handler(void (*__f)()))() 函数类型(返回值类型)是 void (*)();
pengzhixi 2016-06-07
  • 打赏
  • 举报
回复

typedef  void (*FUN_PTR)();
static FUN_PTR   __set_malloc_handler(FUN_PTR)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧