C++项目开发

预备知识

#include 就是把另一个文件里的东西复制到当前文件,无论你的文件是. h 还是. cpp 都是一样的。
c++中我们cpp文件和.h文件的区别是,cpp文件是需要编译的文件,成为一个独立的编译单元,而h文件从来是不需要编译,只是用于预处理。
在写.h文件时,可以在文件开始处写上#pragma once,这条命令可以使同一个文件不会多次包含这个.h文件的内容了。
声明只是告诉编译器有这么一个东西,并不分配空间,定义会具体分配内存空间。

C++程序一般分三类文件:
  • 头文件( .h )。放置各种声明,用于被cpp文件包含。
  • 模块文件(.cpp)。放置一些函数定义,也称为功能模块。
  • 主程序文件(.cpp)。包含main()的文件,程序入口,调用模块文件实现的方法。

头文件

头文件的存在是为了联系多个源文件,是源文件之间的接口。C++与C一样,要求先声明后使用,可是编译的时候是单文件编译的。看一个没有头文件的例子。

头文件的内容一般都会使用条件编译预处理语句(如上)包住,防止因为依赖关系多次被包含。

既然知道头文件的作用,那哪些东西应该放在头文件?哪些不能放在头文件?很好理解,如果这部分需要复制给每个相关的cpp,就把它放在头文件,如果被多个cpp复制之后,可能导致它们在链接过程出错,就不要放在头文件。

  • 函数声明:显然应该放在头文件中,前面很清楚。
  • 类定义、结构定义:用函数定义的逻辑想,似乎不能放在头文件中。但它应该放在头文件。第一,每个cpp文件应该有一个定义,在编译的时候编译器才知道怎么为对象分配空间。其次,类型定义不会在内存上分配空间。
  • 模板函数:编译器必须在编译的时候根据函数模板实例化对应的函数,所以应该放在头文件。
  • 内联函数:编译期间被插到调用位置,所以也要放在头文件。
  • 函数定义:不要!C++规定一个程序同签名的函数只能有一个定义。如果你把函数定义放在头文件件,并且同一个程序的多个cpp文件包含了该头文件,这样,在链接的时候会发现多个定义版本,链接报错。
  • 变量定义:不要!与上面类似,被多个文件包含的时候会出现多次定义同一个变量,链接错误。但是,static变量和extern变量可以,以及宏定义的常量,因为这些在多个文件出现并不会出错。
posted @ 2022-03-07 14:47  cvhao  阅读(376)  评论(0)    收藏  举报