[英]What does (int (*)()) mean in a function call
就像标题所说,我想知道C-define-function-call中的“ (int(*)()) ”是什么意思?
例如,它看起来类似于:
#define Bla(x) (Char *) read((char *(*)()) Blub, (char **) x)
或这个
#define XXX(nx, id) PEM_ASN1_write_bio((int (*)()) id, (char *) nx)
先感谢您!
解密复杂C表达式的最简单方法是从最内层表达式开始,然后以逆时针方向图案移动到下一个表达式。 (int(*)())
返回int的函数的指针,因为它包含在outer()中是因为宏。
希望这会有所帮助,最好的问候,汤姆
(int (*)())
是一个类型转换运算符,也就是说你要求编译器的行为就像它右边的表达式是int (*)()
。 正如其他人所指出的那样,所讨论的类型意味着“指向接受任何参数的函数的指针,并返回一个int
”。
要理解类型本身,首先需要理解在C中声明变量的奇怪方式:在大多数语言中,变量声明的语法是从类型规范的语法构造的,但在C中,在某种程度上,它是其他方式。
如果你要声明一个包含指向这样一个函数的指针的变量,你会写:
int (*fp)();
意思是类似于(*fp)()
的表达式将是int
类型:“取fp
,取消引用它,用任何参数调用它,你将得到一个int
”。
现在,为了在上面的声明中获得fp
类型的类型转换运算符,丢失标识符并在括号周围添加括号:get get (int (*)())
。
这意味着名为Blub
的read
的第一个参数是一个指向函数的指针,该函数返回一个char *
并且不接收任何参数。
第一个说,read将“返回char指针的函数指针”作为第一个参数,将“指向char指针的指针”作为第二个参数。 如果你想做Bla,只需写Bla(x),我就会处理de read部分!
第二个说,PEM_ASN1_write_bio的第一个参数必须是“返回int的函数指针”。 第二个参数是“指向char的指针”。 你可以使用XXX(a,b)代替PEM_ASN1_write_bio(b,a),这就是全部
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.