【发布时间】:2013-01-01 17:54:33
【问题描述】:
假设我想使用包含这 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*s key 和value 的内容将被add 函数复制,并且它不会在返回后存储指针以供使用.这意味着调用函数可以使用这些指针做任何事情,例如freeing key 和 value,在调用 add 之后立即。
调用函数也可以预期add不会修改key或value。
现在,如果没有该注释并且既没有实现源代码也没有使用示例,那么有经验的 C 程序员会如何看待这些所有权问题?
【问题讨论】:
-
反对者的解释会有所帮助。
-
这位经验丰富的 C 程序员不会假设任何事情,并且会测试行为或最好找到源代码和/或文档所在的替代方案可用。
-
“有经验的 C 程序员会假设什么”——我会得出结论(不是假设)程序员不称职。 (这是我对我看到的大多数 C 代码的结论,其中缺少这样的 cmets。)
-
'调用函数也可以预期add不会修改key或value。' -- 嗯,是的,因为它们是按值传递的。如果您的意思是
*key和*value...const强烈建议这样做,但我想有些程序员如此无能,他们可能会将它们存储在add中。 -
'反对者的解释会有所帮助' -- 阅读常见问题解答也会有所帮助。