咨询/usr/include/png.h中typedef声明含义:是否为函数指针返回函数指针
解析png.h中的typedef声明
先直接给出结论:这个声明不是返回函数指针的函数指针,它的作用是定义一种指向特定签名函数的指针类型。
先拆解宏的作用
分析核心结构前,先明确两个宏的含义:
PNGAPI:通常是用来指定函数调用约定的宏,不同平台下会展开为对应关键字(比如Windows下的__stdcall,类Unix系统下可能是空宏,不影响核心逻辑)。PNGARG(...):这是为兼容旧版C标准(C89之前不支持标准函数原型)的兼容宏,展开后就是括号里的参数列表,这里展开后为(png_structp, png_const_charp)。
核心结构分析
去掉宏之后,原声明简化为标准C的函数指针typedef:
typedef void (*png_error_ptr)(png_structp, png_const_charp);
这个声明的具体含义:
- 定义了新的类型别名
png_error_ptr - 该类型的变量是一个函数指针,它指向的函数必须满足:
- 返回值类型为
void(无返回值) - 第一个参数类型为
png_structp(这是另一个typedef,本质是指向png_struct结构体的指针) - 第二个参数类型为
png_const_charp(本质是const char*,指向常量字符串的指针)
- 返回值类型为
区分“返回函数指针的函数指针”
如果是返回函数指针的函数指针,声明会复杂得多,比如类似这样的结构:
typedef void (*(*func_ptr_type))(int);
这个类型的指针指向的是一个返回值为函数指针的函数,和你问的png_error_ptr完全不是一回事。
内容的提问来源于stack exchange,提问作者Wu Jacky
相关产品推荐
相关产品推荐

