2

假设我想使用一个包含这 2 个标头的库:

// types.h
typedef const char* Value;
typedef const char* Key;

// map.h
/** The given name and value will be copied into the map */
void add(struct Map* m, Key key, Value value);

我假设注释意味着char*skey和s 的内容value将被add函数复制,并且在它返回后它不会存储指针以供使用。这意味着调用函数可以在调用之后立即对这些指针执行任何操作,例如freeingkey和。valueadd

调用函数也可以期望add不会修改keyor value

现在,如果没有该注释并且既没有实现的源代码也没有使用示例,那么有经验的 C 程序员会如何假设这些所有权问题?

4

2 回答 2

1

首先是尝试并获取文档。除非 API 记录行为,否则无法 100% 确定。如果所有尝试都失败,那么可以合理地假设:

  1. 函数既不修改也不修改,Key因为Value它们被传递为const.
  2. 除非明确提及,否则调用者保留传递给函数的变量的所有权,并且可以对传递的变量KeyValue函数调用之后做任何他们想做的事情。

此外,一个人应该通过严格的测试来确认假设。

于 2013-01-18T03:15:21.727 回答
0

就个人而言,我希望它能够复制这些值。因为如果不这样做,与局部变量一起使用将是非常危险的。

此外,如果是地图,您必须跟踪所有元素以及它们的分配方式,并在释放地图后自行释放它们(如果不会发生复制)。

于 2013-01-18T03:19:27.963 回答