C++头文件

from:  http://blog.sina.com.cn/s/blog_5c3996ed0100n0rg.html

from:http://blog.youkuaiyun.com/mountzf/article/details/51767353?locationNum=6&fps=1

    每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。
C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。

1,头文件可以定义所用的函数列表,方便查阅你可以调用的函数;
2,头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。
3,头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。
4,他并不是C自带的,可以不用。
5,调用了头文件,就等于赋予了调用某些函数的权限,如果你要算一个数的N次方,就要调用Pow()函数,而这个函数是定义在math.c里面的,要用这个函数,就必需调用math.h这个头文件。

1.2 头文件的结构
头文件由三部分内容组成:
(1)头文件开头处的版权和版本声明(参见示例1-1)。
(2)预处理块。
(3)函数和类结构声明等。
假设头文件名称为 graphics.h,头文件的结构参见示例1-2。
【规则1-2-1】为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
【规则1-2-2】用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
【规则1-2-3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
【建议1-2-1】头文件中只存放“声明”而不存放“定义”
在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。
【建议1-2-2】不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。


// 版权和版本声明见示例1-1,此处省略。
#ifndef   GRAPHICS_H  // 防止graphics.h被重复引用
#define   GRAPHICS_H
#include <math.h>     // 引用标准库的头文件

#include “myheader.h”   // 引用非标准库的头文件

void Function1(…);   // 全局函数声明

class Box             // 类结构声明
  {
  
  };
#endif 

示例1-2 C++/C头文件的结构

1.3 定义文件的结构
定义文件有三部分内容:
(1)       定义文件开头处的版权和版本声明(参见示例1-1)。
(2)       对一些头文件的引用。
(3)       程序的实现体(包括数据和代码)。
假设定义文件的名称为 graphics.cpp,定义文件的结构参见示例1-3。


// 版权和版本声明见示例1-1,此处省略。
#include “graphics.h”     // 引用头文件

// 全局函数的实现体
void Function1(…)
  {
  
  }
// 类成员函数的实现体
void Box::Draw(…)
  {
  
  

示例1-3 C++/C定义文件的结构

1.4 头文件的作用:
早期的编程语言如Basic、Fortran没有头文件的概念,C++/C语言的初学者虽然会用使用头文件,但常常不明其理。这里对头文件
的作用略作解释:
(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用
户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这
一简单的规则能大大减轻程序员调试、改错的负担。

1.5 注意:

并不是所有的变量都能用extern声明,只有全局变量并且没有被static 声明的变量才能声明为extern. 所以如果你不想自己源文件中全局的变量被其他文件引用,你就可以给变量加上static声明。

非const变量默认为extern ,const变量默认为文件的局部变量。而const变量如果想要在其他文件里被访问,必须显示的指定它为extern。如果const对象在编译时可以确定其值,可以将其放在头文件中定义。这么做是有原因的——const对象默认情况下是定义该变量的文件的局部变量,这样即使此头文件被多个包含,都不会在包含这些文件中重复定义此变量,所有对于这个const对象的引用全都指向在头文件中定义的对象。如果在const对象定义的时候声明extern,const对象就变得和普通非const对象一样,从而失去此特性(非const对象的默认属性为extern)。

所以,总结如下:

  • 如果是要定义全局变量,那么在头文件中用extern关键字声明,然后在另一个.cpp文件中定义;
  • 如果是要声明一个不想被其他文件使用、只能被本文件使用的变量,可以用static关键字在头文件中进行定义;
  • 如果所要定义的变量为局部变量,并且其值在编译时就已经可以确定,就可以用const关键词在头文件中进行定义。


### C++头文件的使用方法及常见类型 C++头文件是程序中包含的预定义代码集合,用于提供函数、类和变量的声明。通过在源文件中包含这些头文件,开发者可以调用其中定义的功能[^1]。 #### 头文件的基本使用方法 在C++中,头文件通过`#include`指令引入到程序中。头文件可以分为标准库头文件和用户自定义头文件两种。标准库头文件通常以尖括号`<>`包裹,例如`#include <iostream>`,而用户自定义头文件则以双引号`""`包裹,例如`#include "math.h"`[^2]。 #### 常见的标准库头文件 以下是一些常见的C++标准库头文件及其功能: 1. **输入输出流** - `#include <iostream>`:提供基本的输入输出功能,例如`std::cout`和`std::cin`[^1]。 2. **字符串处理** - `#include <string>`:支持C++风格的字符串操作,例如`std::string`[^1]。 3. **数学运算** - `#include <cmath>`:包含数学函数,如`sin`、`cos`、`sqrt`等[^3]。 - `#include <complex.h>`:提供复数处理功能[^3]。 4. **数据结构** - `#include <vector>`:支持动态数组`std::vector`[^1]。 - `#include <map>`:实现键值对存储的关联容器`std::map`。 5. **算法** - `#include <algorithm>`:提供各种通用算法,例如排序、查找等。 6. **时间与日期** - `#include <ctime>`:用于时间日期操作,例如`std::time`。 7. **布尔与整型环境** - `#include <stdbool.h>`:定义布尔类型`bool`[^3]。 - `#include <stdint.h>`:定义固定宽度的整型类型,例如`int8_t`[^3]。 #### 注意事项 虽然存在一些“万能头文件”,例如`#include <bits/stdc++.h>`,它几乎包含了所有C++标准库头文件,但由于其包含的内容过多,可能导致编译速度变慢,因此建议根据实际需求选择性地包含头文件[^1]。 ```cpp #include <iostream> #include <vector> int main() { std::vector<int> numbers = {1, 2, 3, 4, 5}; for (const auto& num : numbers) { std::cout << num << " "; } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值