【发布时间】:2012-11-16 18:53:33
【问题描述】:
在我的代码中,我必须使用几个函数作为 lambdas,例如您应该提供给qsort。
因此,当我传递int 类型的函数时,程序运行良好。但是当我还添加了double 类型的另一个函数时,出现了错误消息:
1.c:44:29: 错误:二进制
从行:
return (*getter)(a) < target
getter 是指向的指针:
double get_sex(struct human* a) { // it's the second function I've passed
return a->sex;
}
我传递的两个函数之间的唯一区别是第一个是int,第二个是double。
sometype somefunction (some parameters,
int *comparator(struct human*, double, double *(struct human*)),
double *getter(struct human*) ) {
....
}
我开始使用sizeof 对其进行检查,发现代码(*getter)(*a) 以某种方式返回4 个字节而不是8 个字节,因此它必须是一个指针而不是双精度。这就是我收到该错误消息的原因。
我以Wikipedia 为例,发现了额外的()。我已经添加了它们,现在它返回 8 个字节并且工作正常。
double (*getter)(struct human*) ) {
所以问题是:为什么要在getter 周围加上括号,而不是在comparator 周围加括号?函数返回double而不是int的原因是什么?!
这是我从未听说过的语法细节。
(我使用在我的 Windows 上已经安装的编译器 - 来自 Perl 解释器 Strawberry)
【问题讨论】:
-
您应该发布一个小而完整的示例来说明问题。答案可能取决于一个小细节。
标签: c types syntax function-pointers