C ++标头和实现,(为什么)IDE /编译器不自动处理它?

时间:2018-07-21 13:22:15

标签: c++ header-files

在C ++中,您的类通常分为两部分,即头文件和实际实现。以我(没有经验)的观点,这太糟糕了。它要求我做所有不必要的记账工作,使项目目录混乱,并且与我学到的有关软件开发(双重实现)的一切知识背道而驰。您只需要处理实现的语言(例如Java或Python)会更好用。

我一直都知道使用它们的原因是大大减少了编译时间。但是,现代的IDE(在我的案例中为CLion)甚至编译器都不够聪明,无法做到以下任何一项:

  • 保留某种“影子”头文件,只要在实现中更改定义,该文件就会自动更新?

  • 在编译期间自动将其拆分为标头和实现,从而只需要处理一个文件即可? (似乎是Lazy C++的东西)

或者是否有提供这种行为的插件可用? C ++模块似乎也可以解决此问题,但是我目前尚不清楚它们的当前状态/支持,而且更糟的是,似乎有两个相互竞争的标准(Clang和Microsoft)。

1 个答案:

答案 0 :(得分:1)

不幸的是,事情并非如此简单。头/源文件分离C ++由于预处理器而从C继承,两者共享。通常不可能自动生成头文件,首先,分离不是一件容易的事,第二个头文件通常具有手动编写的预处理程序代码并生成编译代码。第三,由于编译过程和可见性规则,几乎所有模板化代码都转到头文件。更改所有这些都将需要破坏与现有代码的兼容性,而现有代码的数量是巨大的,没有人愿意这样做。创建另一种语言(例如D)会更容易,但是由于种种原因,许多人都不想迁移。我们知道该委员会正在研究模块,如果它们设法使它们在不破坏兼容性的情况下工作,那对我们中的许多人都会有所帮助。但这又不是一件容易的事,您描述它的方式仅在某些环境中(当您限制自己时)有效,而不能应用于所有人。