Ene*_*th3 5 c c++ header-files
我是C系列编程和编译的新手。我试图了解什么.c / .cpp文件和.h文件处于较低的技术水平。我了解.h文件用于指定接口,而.c或.cpp文件用于实现。但是,我想知道这种区别是否反映在编译器的工作方式上,还是“只是”一种为我们人类简化的命名约定?从理论上讲,您可以在.h文件中包含这个隐含内容,并且仍然可以对其进行编译吗?或在.c文件中指定接口?我要求更好地了解编译器的实际功能。
从技术上讲,就编译器而言,任何扩展之间没有区别。就像您手动键入放置的任何文件的内容一样#include。您可以键入#include "foo.pdf",并且编译器将成功包含文件foo.pdf,只要该文件包含代码(尽管扩展名)
现在按照惯例,通常将声明放在.h / hpp文件(或模板定义)中,并将实现放在.c / cpp文件中。
许多库还具有内联变量/函数,具有单文件实现。
有时甚至包括文件都不存在,例如,当包括一个标准STL文件(如string)时,编译器可能根本不会读取该文件,而是根据需要对其进行缓存/实现。
关于更多信息#include在MSDN和CPPReference。
编译器会执行您要求的操作。它将编译您指定为其输入的文件,并且作为此编译的一部分,如果您使用#include预处理程序指令指示这样做,它将在这些输入文件中包含其他文件。
如果您告诉编译器编译.h文件(并传递命令行选项以使其视为源文件,例如-x cgcc),它将很好地进行编译。如果是#include "a.cpp",它将正常包含在内。