包含标题(.h文件)和C ++文件(.cpp文件)之间有什么区别?当我创建一个类时,我创建一个.h文件和.cpp文件。如果我想使用这个类的对象,我是否应该包含这两个文件?在哪些情况下我应该包含.cpp文件?
答案 0 :(得分:2)
调用哪些文件及其内容完全是惯例。如果您想混淆用户,可以调用标题文件something.b
和源文件something.r
- 这对大多数人来说当然没什么用处,有些人可能认为您的文件包含语言R而不是C ++来源。您的编辑可能不会理解它在.b
文件中的C或C ++ - 以及Make
,scons
,CMake
等构建工具可能不明白如何编译你的文件而不被告知"。 [编译器也查看文件扩展名,以确定它是否应该编译为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一次)保护,以防止重复其内容。
注意:编译器在预处理后执行它(或在编译之前调用预处理器)。