我想知道在C(89/90)中是否可以链接函数调用,以及它在C规范中定义的位置.我认为这是不可能的,因为谷歌搜索没有提到它.我想到这是因为与我的一个朋友进行了相关的对话,他告诉我,给定一个返回结构的函数,你不能在同一个语句中对所述结构执行任何操作; 相反,您必须将函数的结果赋给变量,然后通过变量而不是直接从函数结果本身操作结构.这让我相信你也不能链接函数,但我似乎无法找到规范中讨论的这些限制.
编辑:对不起,我应该具体了解返回值.假设函数返回一个函数指针,是否可以取消引用并以流畅的方式在同一语句中调用结果?
例如,假设getFunc返回一个函数指针:(*getFunc(getFuncParam))(otherFuncParam)
或者在struct的情况下,假设一个带有名为"count"的int成员的结构:
funcReturnsStruct(PARAM).Count之间++;
这是C中的函数链接:
post_process(process(pre_process(data)));
Run Code Online (Sandbox Code Playgroud)
显然,你的朋友错了.只要函数通过接受和返回相同类型的值进行协作,您就可以将所有调用链接起来.
将此与此类似
data.pre_process().process().post_process();
Run Code Online (Sandbox Code Playgroud)
最大的区别在于,C(没有封装,因此没有类)功能有中心舞台,而在更现代的OO语言中,它的对象得到更多的关注.
更新:无论每个功能可能返回什么,当然可以链接.例如:
int increase(int x) {
return x + 1;
}
typedef int (*increase_fp)(int);
increase_fp get_increase() {
return increase;
}
int main(void) {
printf("%d", get_increase()(1));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |