就像标题所说,我想知道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)
提前谢谢!
答案 0 :(得分:9)
将参数强制转换为指向函数的指针,该函数返回char *
并获取零个或多个参数。第二个函数返回int
。
您可以使用名为“cdecl”的程序(以及现在的网站)来帮助解决这些问题,它说:
(char *(*)())
:将unknown_name转换为指向函数的指针,返回指向char的指针(int (*)())
:将unknown_name转换为指向函数返回int的指针答案 1 :(得分:3)
解密复杂C表达式的最简单方法是从最内层表达式开始,然后以逆时针方向图案移动到下一个表达式。 (int(*)())
指向返回int的函数的指针,因为它包含在outer()中是因为宏。
希望这有帮助, 最好的祝福, 汤姆
答案 2 :(得分:1)
(int (*)())
是一个类型转换运算符,也就是说你要求编译器运行
好像右边的表达式是int (*)()
类型。正如其他人所说,
有问题的类型意味着“指向接受任何参数的函数的指针,
并返回int
“。
要了解类型本身,首先需要了解其中的奇怪方式 变量在C语言中声明:在大多数语言中,变量声明的语法 是从类型规范的语法构造的,但在C中,在某种程度上, 反过来了。
如果你要声明一个包含指向这样一个函数的指针的变量,你可以写:
int (*fp)();
表示类似(*fp)()
的表达式为int
类型:“take fp
,
取消引用它,用任何参数调用它,你将获得int
“。
现在,为了在上面的声明中获得fp
类型的类型转换运算符,丢失标识符并添加括号:得到(int (*)())
。
答案 3 :(得分:0)
这意味着名为read
的{{1}}的第一个参数是指向返回Blub
并且不接收任何参数的函数的指针。
答案 4 :(得分:0)
首先说,read将“返回char指针的函数指针”作为第一个参数,将“指向char指针的指针”作为第二个参数。如果你想做Bla,只需写Bla(x),我就会处理de read part!
第二个说,PEM_ASN1_write_bio的第一个参数必须是“返回int的函数指针”。第二个参数是“指向char的指针”。并且您可以使用XXX(a,b)代替PEM_ASN1_write_bio(b,a),这就是全部