【问题标题】:Use of do nothing function什么都不做功能的使用
【发布时间】:2016-06-27 13:38:45
【问题描述】:

什么是无操作函数(在 C 中)的一些用例,例如:

dummy() {}

我正在阅读 K&R 的“C 编程语言”,在第 4 章(函数和程序结构)中,它提到了

像这样(如上所示)的无操作函数有时在程序开发过程中用作占位符。

谁能解释一下作者的意思以及这些函数的用途?

【问题讨论】:

  • 引用的文字有什么不明白的地方?
  • 假设你想要一个广泛计算的结果,但程序员还没有写完。您可以使用占位符函数返回一个虚拟值,以便您可以继续执行您的部分代码。
  • @EugeneSh。我的意思是占位符是为了什么???
  • 一些实际功能。
  • @WeatherVane 现在我明白了!谢谢。

标签: c function linker linker-errors


【解决方案1】:

(还)什么都不做的函数表示应该做某事,但还没有实现。

【讨论】:

    【解决方案2】:

    看看“Skeleton”、“dummy code”、“mock objects”等编程习惯。这是一种非常常见的技术,可以让您在不实现每个细节的情况下测试程序的整个架构。

    假设您有一个应用程序能够通过调用函数save() 将结果保存到文件中,您希望能够测试应用程序而无需真正将结果保存到文件中。所以函数save() 可以是一个空的函数!像这样写(这里是伪代码)很常见:

    save() {
        print "save() not yet implemented";
    }
    

    能够跟踪呼叫。

    【讨论】:

      【解决方案3】:

      您已经收到了答案,但为了详细说明为什么部分,让我加两分钱。

      如果您尝试使用没有定义的函数(调用函数),linker will throw undefined reference error,因为它将无法找到实际要链接到的给定目标文件中的任何位置的函数定义。

      所以,有时在开发阶段,当您需要调用一个要实现(或直到时间不可用)的 API 时,会添加一个虚拟函数定义,

      • 两者都没有没有意义
      • 或返回固定值

      只是为了编译和检查(测试)调用函数(模块)的工作。如果没有虚拟函数定义,调用函数的代码会抛出错误。

      【讨论】:

        【解决方案4】:

        当你编写代码来解释某事时,最好省略辅助函数,这样读者就可以专注于问题而不是细节。

        当你写一个真正的程序时,我更喜欢先创建辅助函数,测试它们,然后将所有注意力集中在主流上。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-19
          • 2017-10-05
          • 1970-01-01
          • 2018-12-17
          • 2020-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多