【问题标题】:how to change what function returns without changing header file如何在不更改头文件的情况下更改函数返回的内容
【发布时间】:2013-02-20 14:03:49
【问题描述】:

对于分配,我们必须使用预先确定的头文件 - 我无法对其进行任何更改。

然而大多数函数返回一个节点(一个结构节点),但我希望它们返回一个指向节点的指针。

有什么方法可以更改我的functions.c 文件中的函数调用?

如果没有返回节点,我怎么能有一个指针指向它??

例如:

bst_node_t BSTSearchNode( bst_root_t root, bst_key_t key, cmp_func_t cmp_func );

是头文件中的函数原型。但是我想返回一个指向节点而不是节点本身的指针。

【问题讨论】:

  • 你必须使用那个特定的头文件和这些特定的函数吗?如果是这样,你不能改变它。或者你需要重新定义函数。
  • 您确定bst_node_t 不是指针吗?
  • 为什么要更改这些原型?好的编译器能够优化出在许多情况下会通过返回结构而产生的副本。由于这是一项任务,因此您不必担心。专注于按要求实现 API。
  • 我认为它是一个指针,因为它被定义为 typedef void* bst_node_t 但是当我尝试写 node = NULL 时它说这是无效的\
  • 如果有typedef void *bst_node_t;,那么bst_node_t就是指针。但是将指针隐藏在 typedef 后面是邪恶的。你能显示标题吗?

标签: c function struct


【解决方案1】:

不,你不能,函数声明和定义必须匹配。

出于好奇,是否会使用与您的实现链接的程序检查分配,并尝试调用 BSTSearchNode 函数?在这种情况下,您真的想以正确的方式定义它......

编辑:根据您的评论,您的任务实际上是按照定义实现函数,而不是更改其返回类型。所以,就这样做吧;)

按要求传递值实际上可能更简单(如果您尝试传递指向数据的指针,则必须注意节点的内存分配位置,谁拥有它等...)。您的标头中的 API 可能不适用于此。

当然,如果bst_node_t 是指向某个实体的指针的typedef,这也适用,在这种情况下,您无需更改任何内容。没有标题很难说......

【讨论】:

  • 是的,一个自动程序会检查它......所以你知道当它返回时我如何将它更改为指针吗?这可能吗?
  • 所以我不明白的是我应该使用二叉树,而 bst_node_t 是结构的一部分,但不是结构本身,所以当它返回时我如何访问整个节点?
  • 如果没有标题,我们不能告诉你(bst_node_t 真的是针对你的情况。)你应该研究类型的定义,对于这类问题,你的老师/助教比 SO 更适合 :) 祝你好运。
  • 在您的情况下,如果您的问题是“如何从 bst_node_t 访问 bst_root_t”,那么节点与其父节点之间是否存在关系?
  • 我的问题是如何将 typedef void* bst_node_t 变成一个结构体?
猜你喜欢
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多