Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C或C++中没有头的编码有什么客观原因?_C++_C_Header_Header Files - Fatal编程技术网

在C或C++中没有头的编码有什么客观原因?

在C或C++中没有头的编码有什么客观原因?,c++,c,header,header-files,C++,C,Header,Header Files,可能重复: 灵感来自-OP只是发现头球的概念令人困惑和沮丧,这是他的主观体验 在C或C++中,有没有避免标题的客观原因和场景? 根本没有,只是一个坏主意。 唯一的客观原因是,如果您的C编译器在编译过程中只能包含数量极其有限的文件,或者您正在使用的系统的索引节点数量极其有限。没有客观原因,只有那些非理性的,由与其他语言的经验所引起的主观偏见造成的,标题作为一个概念是不存在的 编译单元是C和C++编译器的基本概念。编译单元必须在源代码级别访问所有声明,才能访问其他编译单元提供的功能,并且确保功能的

可能重复:

灵感来自-OP只是发现头球的概念令人困惑和沮丧,这是他的主观体验


在C或C++中,有没有避免标题的客观原因和场景?

根本没有,只是一个坏主意。
唯一的客观原因是,如果您的C编译器在编译过程中只能包含数量极其有限的文件,或者您正在使用的系统的索引节点数量极其有限。

没有客观原因,只有那些非理性的,由与其他语言的经验所引起的主观偏见造成的,标题作为一个概念是不存在的

<>编译单元是C和C++编译器的基本概念。编译单元必须在源代码级别访问所有声明,才能访问其他编译单元提供的功能,并且确保功能的发布者和使用者看到声明的唯一逻辑一致的方法是让他们共享这些声明的源代码。标题是实现这一点的自然方式

它稍微有点技术性,头不是C或C++概念本身。它们是预处理器的概念。在处理源文件时,每当预处理器遇到include指令时,它就会用引用的头的全部内容替换该指令,递归地扩展头本身中的任何include指令。当编译器启动时,它只看到一个文件,其中包含完成其工作所需的所有声明


<> P>关键在于,无论是好还是坏,头是组织复杂的C和C++代码库的标准方法。您可以使用ifdef玩有趣的游戏,将头文件和实现放在一个源文件中,但这对世界上的每一个工具链都是不利的,这意味着预处理器有更多的工作要做,从而大大降低了构建速度。

包含头文件会告诉编译器,确切地说,在这里复制粘贴一些文本。现在,也许你的问题真的在问,头文件是否有任何误用?当然有,但正如所写的,它没有什么意义,因为,有没有客观的理由避免使用源文件?

在我使用java之前,我发现头文件很棒。现在我发现它们很烦人,因为这是代码复制,你必须保持两个文件同步


当然,如果您有一个动态构建头部的工具,那么它还不错。有这样的工具吗

否,头文件是一个基本工具,不能按原样在语言中删除。这并不意味着它们不完全糟糕,不应该尽快删除。

我有一个很好的理由避免使用C中的头文件:将开源应用程序作为单个.C文件分发


这是用于转换数码相机原始文件的ANSI-C跨平台软件的分发模式。

另一个问题的答案有什么问题?@David Heffernan:他们回答了如何做到这一点,我想问的是为什么要这样做?@David,另一个问题的答案是关于这样做是否可以,而不是-有什么可能的原因可以让一个人采取这种方法-因此,在我看来,这是一个有效的问题-但我肯定想不出任何。。。!!4投票因3个不同的原因而结束。我想我希望所有文件的数量尽可能少,而不仅仅是头文件,不是吗?在这样的系统上,你可能也只能编写小程序,所以这不是一个很难的限制。代码复制也是一种安全功能。如果您键入两次函数声明,并且它们相等,则可能是正确的。@Bo Persson:不,不太正确。代码重复错误,包括头文件。代码复制从来都不安全,这只是编译器发现的代码复制错误。@DeadMG:对,编译器发现的错误是好的。:-如果标头有正确的接口,而您的实现是错误的,该怎么办?如果您不使用复制和粘贴进行复制,这是一项严肃的工作。如果你这样做,你就不会发现这样的错误。你可以把你所有的代码写在头文件中,只有一个文件需要维护。然后,您只需要一个带有主函数的.cpp文件。头文件变成了源文件,你仍然需要在其他源文件中包含你的源文件,但是看,妈!没有头文件!是的,这是荒谬的,不,我不是认真的,是的,我正在尝试:为什么C++委员会计划将模块化编译特性添加到C++中?@ ASASHE:我不是在暗示这是世界应该的方式;我多年来一直在编程C和C++,我很熟悉使用头文件的缺陷。我只是说明在当前的工具下应该如何做
一个模块化编译系统的C++是一个非常有趣的开发。不过,我还没听说过这个。你有链接吗?看我的答案,有链接。@Ashot:我只是快速浏览了一下。第一件被曝光的事情是,对于宏来说,头是不可避免的。由于有80%的头文件直接或间接地使用宏,这对我来说似乎是一个阻碍。也许那里的肉比我想象的要多,但如果这项建议很快付诸实施,我会感到惊讶。这并不是一个确切的原因。他们就是这么做的。问题是他们为什么这样做。我看不出使用单个文件比使用多个文件有什么好处,因为它们无疑会被包装在一个gz或zip文件中进行传输。@Martin-作为该代码的用户,我发现集成到我自己的开发项目中更容易。gz或zip比原始源代码多了一步。