答案 0 :(得分:5)
没有客观的理由,只有非理性的理由伴随着其他语言的经验所引起的主观偏见,其中标题不存在作为一个概念。
编译单元是C和C ++编译器的基本概念。编译单元必须能够访问源代码级别的所有声明才能访问其他编译单元提供的功能,并且唯一逻辑上一致的方法是确保发布者和功能消费者看到声明是为了让他们共享源代码对于那些声明。标题是实现这一目标的自然方式。
对它有点技术性,标题不是C(或C ++)概念,本身。它们是预处理器的概念。处理源文件时,只要预处理器遇到#include
指令,它就会将指令替换为所引用标头的全部内容,以递归方式扩展标头本身中的任何#include
指令。当编译器正确启动时,它只会看到一个“文件”,其中包含完成其工作所需的所有声明。
关键是,无论好坏,标题是组织复杂的C和C ++代码库的标准方法。您可以使用#ifdef
来玩乐趣和游戏,将“标题”和实现放在一个源文件中,但这对宇宙中的每个工具链都有效,这意味着预处理器还有很多工作要做,因此大大减慢你的构建速度。
答案 1 :(得分:0)
根本没有,这只是一个坏主意。
唯一的客观原因是,如果您的C编译器在编译过程中只能包含数量非常有限的文件,或者您正在使用的系统中包含极少数量的inode。
答案 2 :(得分:0)
#include
头文件告诉编译器,字面意思是“在这里复制粘贴一些文本”。现在也许你的问题真的在问,“头文件是否有任何误用?” (当然有),但正如所写的那样,“没有任何客观的理由可以避免源文件吗?”
答案 3 :(得分:0)
在使用java之前,我发现头文件很棒。现在我发现它们很烦人,因为它是代码重复,你必须保持2个文件同步。
当然,如果你有一个动态构建标题的工具,它就不那么糟糕了。有这样的工具吗?
答案 4 :(得分:0)
不,头文件是必不可少的工具,不能用语言删除。这并不意味着他们不会完全吮吸,也不应该尽快移除。
答案 5 :(得分:0)
我在C中避免使用标头的一个很好的理由:将开源应用程序作为单个.c
文件分发。
这是用于转换数码相机RAW文件的ANSI-C跨平台软件dcraw的分发模式。