包含标题和C ++文件有什么区别?

时间:2016-03-02 18:17:07

标签: c++ header include

包含标题(.h文件)和C ++文件(.cpp文件)之间有什么区别?当我创建一个类时,我创建一个.h文件和.cpp文件。如果我想使用这个类的对象,我是否应该包含这两个文件?在哪些情况下我应该包含.cpp文件?

4 个答案:

答案 0 :(得分:2)

调用哪些文件及其内容完全是惯例。如果您想混淆用户,可以调用标题文件something.b和源文件something.r - 这对大多数人来说当然没什么用处,有些人可能认为您的文件包含语言R而不是C ++来源。您的编辑可能不会理解它在.b文件中的C或C ++ - 以及MakesconsCMake等构建工具可能不明白如何编译你的文件而不被告知"。 [编译器也查看文件扩展名,以确定它是否应该编译为C ++或C,这当然不适用于"非常规名称"]

重要的不是调用文件的内容,而是它们实际包含的内容。标题(大多数人称之为something.h)文件应该是这样的,它可以包含在任何地方,并且在项目中可以包含任意次数[例外确实存在,其中头文件实际上不包括在内整个项目中的单个时间 - 例如version.h,它声明一个描述当前版本号的字符串]。

源文件(通常称为something.cpp通常应该直接传递给编译器进行编译,而不是用作#include "something.cpp"。但是,确定这一点的是CONTENT,不是文件的名称。如果您以这种方式使用它们,那就是命名错误的文件。

总结:编译器只读取传入的源文件,然后"插入"将#include放入它编译的代码流中,就好像它被粘贴到原始源文件中一样。编译器并不真正关心你的文件名是什么,它们来自何处,或者它们的内容是什么,只要编译器是" ok"编译整体。

答案 1 :(得分:1)

从编译器的角度来看,包含.cpp.h文件没有区别。但.cpp.h的内容在常见情况下有所不同。 .cpp文件用于实现类,函数,静态对象,.h文件用于类定义。如果将.cpp文件包含到另一个.cpp文件中,则内容将重复,并且会因链接命名而在链接阶段失败。

答案 2 :(得分:0)

  

包含标题(.h文件)和C ++文件(.cpp文件)之间有什么区别?

假设.cpp文件包含一些函数定义,后一个选项通常不适用于常用的构建系统,并且当multiple definition.cpp时,最终会出现.cpp错误包括更多的一个翻译单位。

异常可能是在HttpCookie myCookie = Request.Cookies["MyTestCookie"]; DateTime now = DateTime.Now; // Set the cookie value. myCookie.Value = now.ToString(); // Don't forget to reset the Expires property! myCookie.Expires = now.AddYears(50); Response.SetCookie(myCookie); 文件中内联了所有函数定义。

原则上,C / C ++预处理器只是将文件类型中的文本扩展到当前的翻译单元中。文件扩展名在此处不起任何作用。

答案 3 :(得分:0)

没有区别。两者都由预处理器作为纯文本处理,以连接到单个文件。但是,包含源可能会产生不良结果(变量/函数的多个定义)。头文件通常由包含保护(#ifndef HEADER_H或#pragma一次)保护,以防止重复其内容。

注意:编译器在预处理后执行它(或在编译之前调用预处理器)。