IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

接口设计规则一:让你的接口会说话

Zhang Jiuan' Notes 2010-06-03 22:29:14 累计浏览 4,505 次
本机暂存

在面试过程中,我时常会问一道简单的题目:
请找出如下程序不妥之处:
void s_c(const char *s, const char *p)
{
while (*s) {
*p = *s;
}
}
首先,这道简单的题目考察的是找错能力,比如结束符和const的应用。
其次,考察的是接口设计能力,这也是重点。
没有返回值,因此对于一些异常现象不好对外表现,const是否应用正确,
函数名使用是否见其名知其意,函数参数是否见其名知其意,有没有对接
口的简述,指针,引用,就量传递使用是否正确等等。
比如改成如下:
/**
* brief: 拷贝字符串,从源串到目的串
* param[in]: src 源串地址
* param[out]: dest 目的串地址
* return: 成功 0
* 失败 错误码
*/
int strcpy(const char *src, char *dest);
这样只接口就可以很清楚的了解它的功能和用法了。
当然,在代码实现过程中,还有许多其它需要考虑的点,
比如输入是否合法,出错处理,边界处理等等。
现修改如下:
/**
* brief: 拷贝字符串,从源串到目的串
* param[in]: src 源串地址
* param[out]: dest 目的串地址
* return: 成功 0
* 失败 错误码
*/
int strcpy(const char *src, char *dest)
{
if (NULL == src || NULL == dest) {
return -1;
}

while (*dest = *src);

return 0;
}
真正细心的你,觉得这样的程序正确吗?效率又如何?
如果有问题,如何改进?

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. Google怎么用linux (累计阅读 12,580)
  2. 如何学好C++语言 (累计阅读 10,448)
  3. Emacs配置C/C++-mode的代码智能提示和自动补全 (累计阅读 10,411)
  4. colortail,让 tail 命令绚丽起来 (累计阅读 10,258)
  5. Linux操作系统的内存使用方法详细解析 (累计阅读 10,149)
  6. 在C++中实现foreach循环,比for_each更简洁! (累计阅读 9,498)
  7. 几个内存相关面试题(c/c++) (累计阅读 9,443)
  8. 关于使用STL的红黑树map还是hashmap的问题 (累计阅读 8,875)
  9. 浅析C++多线程内存模型 (累计阅读 8,802)
  10. C++ 多线程编程总结 (累计阅读 8,097)