【问题标题】:Function Declaration without apparent benefit [duplicate]没有明显好处的函数声明[重复]
【发布时间】:2017-10-16 09:50:54
【问题描述】:

我目前正在自己​​完成一个现有项目,并来到以下 sn-p:

int main(int argc, char** argv);

int main(int argc, char** argv)
{
    ...
}

这基本上就是整个文件。现在,据我了解,第一个函数声明根本没有意义:在提供的行之间没有其他函数试图调用 main。

现在我的问题是:是否有任何我不知道的情况会从第一个声明中受益(可能与其他文件相互依赖)?还是可以安全删除?由于项目的规模,我目前还不能真正测试它,我很好奇。

【问题讨论】:

  • 你有版本控制历史吗?也许它在过去有所作为。无论如何,它看起来很奇怪,可能就像诗歌一样。只有作者知道这到底是什么。坚持某些政策似乎有些奇怪。
  • “在提供的行之间没有其他函数可以尝试调用 main。” => 最好不要。 You may not call main from your own code.
  • @Hafnernuss - 它不仅相关,如果不是语言标签,我会认为它是重复的。事实上,this answer 涵盖了这篇文章。
  • @luk32:可能。也许作者只是喜欢这种方式。

标签: c++ function-declaration


【解决方案1】:

第一行就是你所说的原型/签名,它代表函数的签名:名称、参数、返回类型。 我认为here 可以回答你的问题,但我会试着说一些简短的话。 第二个是函数的定义,就是写函数代码的地方。

原型告诉“嘿,这是一个函数,它是这样制作的,接受这些参数,我将在我的代码中使用它。你会在代码中的某个地方找到它的实现,但考虑它存在并且可以工作”。

定义是在告诉“嘿,我的函数是这样工作的”。

通常你会发现在某个地方编写原型很有用,而在不同的文件中编写相关定义,以使代码更简洁。

原型不是强制性的,它只是在实现函数之前定义和使用函数的一种方式(说得很糟糕),但是如果没有原型,您将不得不直接定义它,这对可读性非常不利,代码的可维护性和可理解性。

也就是说,我认为删除第一行是非常安全的,因为main() 是立即定义的,它是您程序的entry point。它没有在代码中显式调用,因为它是在您启动软件时调用的。

【讨论】:

  • 谢谢。我知道原型和实现的基本概念(尽管您的链接有很大帮助,尤其是在术语方面),但我的问题更多与使用主原型的特殊情况有关。所以如果原型没有其他花哨的用法,我想我的直觉是对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2020-04-13
  • 2013-09-27
相关资源
最近更新 更多