.h文件是由编译器区别对待还是“仅”命名约定?

Ene*_*th3 5 c c++ header-files

我是C系列编程和编译的新手。我试图了解什么.c / .cpp文件和.h文件处于较低的技术水平。我了解.h文件用于指定接口,而.c或.cpp文件用于实现。但是,我想知道这种区别是否反映在编译器的工作方式上,还是“只是”一种为我们人类简化的命名约定?从理论上讲,您可以在.h文件中包含这个隐含内容,并且仍然可以对其进行编译吗?或在.c文件中指定接口?我要求更好地了解编译器的实际功能。

Mic*_*kis 9

从技术上讲,就编译器而言,任何扩展之间没有区别。就像您手动键入放置的任何文件的内容一样#include。您可以键入#include "foo.pdf",并且编译器将成功包含文件foo.pdf,只要该文件包含代码(尽管扩展名)

现在按照惯例,通常将声明放在.h / hpp文件(或模板定义)中,并将实现放在.c / cpp文件中。

许多库还具有内联变量/函数,具有单文件实现。

有时甚至包括文件都不存在,例如,当包括一个标准STL文件(如string)时,编译器可能根本不会读取该文件,而是根据需要对其进行缓存/实现。

关于更多信息#includeMSDNCPPReference


Rei*_*ica 5

编译器会执行您要求的操作。它将编译您指定为其输入的文件,并且作为此编译的一部分,如果您使用#include预处理程序指令指示这样做,它将在这些输入文件中包含其他文件。

如果您告诉编译器编译.h文件(并传递命令行选项以使其视为源文件,例如-x cgcc),它将很好地进行编译。如果是#include "a.cpp",它将正常包含在内。