自己动手,丰衣足食
ps.其实这一篇文章老早以前就写了,一直扔在草稿箱,今天想起来了然后就发了出来。。。
首先,熟悉熟悉这些:
是的没错,这就是我们的Dev-cpp!
忽略其他东西,重点是这个:
???这不是C++万能头文件吗?(如果没听过请忽略)
是的,步入正题:C++如何编写属于自己的头文件
什么是头文件?
一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现(就是所谓.c/.cpp)。
C++/C程序的头文件以“.h”为后缀。以下是假设名称为graphics.h的头文件:
#ifndef GRAPHICS_H//作用:防止graphics.h被重复引用
#define GRAPHICS_H
#include<....>//引用标准库的头文件
...
#include"..."//引用非标准库的头文件
...
void Function1(...);//全局函数声明
...
inline();//inline函数的定义
...
classBox//作用:类结构声明
{
...
};
#endif
从以上例子可以看出,头文件一般由四部分内容组成:
(1)头文件开头处的版权和版本声明;[不要也无所谓]
(2)预处理块;
(3)inline函数的定义;
(4)函数和类结构声明等。
在头文件中,用 ifndef/define/endif结构产生预处理块,用 #include 格式来引用库的头文件。头文件的这种结构,是利用C语言进行开发软件所通常具备的,属于公有知识。
什么样的内容适合放在头文件里?
对于具有外部存储类型的标识符,
可以在其他任何一个源程序文件中经声明后引用,
此用户完全可以将一些具有外部存储类型的标识符的声明放在一个头文件中。
具体地说,头文件中可以包括:
用户构造的数据类型(如枚举类型),外部变量,外部函数、常量和内联函数等
具有一定通用性或常用的量。
而一般性的变量和函数定义不宜放在头文件中。
例如:
#include<stdio.h>
中的头文件stdio.h
作用是:
让链接器通过头文件里的函数声明找到函数实际代码所在的位置即所在的库文件**,
这样才能使用该函数的实际代码,
函数的实际代码的实现过程是先让链接器通过头文件里函数的声明
找到函数实际代码所在的位置即所在的库文件,
再通过#include
语句把链接器所找到的函数实际代码
用链接器把函数的实际代码链接到当前文件即所要执行的程序中。
当然有些函数的使用不需要提供头文件,
但是在ISO/ANSI C
已经对有些函数的使用必须提供哪些头文件制定了标准。
错误示范:跳转
想一想什么样的内容适合放在头文件里?
所以这样并不是很好的写法,再多算一个模块,制成cpp文件,然后:
例如:
注:两个文件必须放在同一个目录下面!!!
a.cpp:
int intp(int a,int b){
return a+b*2;
}
int intq(int a,int b){
return a*2+b;
}
b.cpp:
#include "a.cpp"
int main(){
int a=5,b=6,c=0;
c=intp(a+b,a-b)*intq(a+b,a-b);
return c;
}
运行:
补图:
在编译器看来其实代码变成了:
int intp(int a,int b){
return a+b*2;
}
int intq(int a,int b){
return a*2+b;
}
int main(){
int a=5,b=6,c=0;
c=intp(a+b,a-b)*intq(a+b,a-b);
return c;
}
原理不要我说了吧。
持续更新文章,请时刻关注!
传统 C++标准头文件
#include<algorithm>//STL通用算法
#include<bitset>//STL位集容器
#include<bits/stdc++.h>//编译器GCC 4.8支持的万能头文件,基本包含所有头文件
#include<cctype>//C字符处理
#include<cerrno>//C的错误报告机制
#include<clocale>
#include<cmath>//兼容C语言数学库
#include<complex>//复数类
#include<cstdio>//C语言输入输出工具
#include<cstdlib>//C语言通用工具
#include<cstring>//C字符串
#include<ctime>
#include<deque>//STL双端队列容器
#include<exception>//异常处理类
#include<fstream>//文件输入输出流
#include<functional>//STL定义运算函数(代替运算符)
#include<limits>
#include<list>//STL线性列表容器
#include<map>//STL映射容器
#include<iomanip>
#include<ios>//基本输入/输出支持
#include<iosfwd>//输入/输出系统使用的前置声明
#include<iostream>//基本输入输出流
#include<queue>//STL队列容器
#include<set>//STL集合容器
#include<sstream>//基于字符串的流
#include<stack>//STL堆栈容器
#include<stdexcept>//标准异常类
#include<streambuf>//底层输入/输出支持
#include<string>//字符串类
#include<utility>//STL通用模板类
#include<vector>//STL动态数组容器
#include<cwchar>
#include<cwctype>
//在C++中,标准库的命名空间为std,因而包含了上述头文件时,一般会使用下列语句:
using namespace std;
//C99 版本
#include<complex.h>//复数处理
#include<fenv.h>//浮点环境
#include<inttypes.h>//整数格式转换
#include<stdbool.h>//布尔环境
#include<stdint.h>//整型环境
#include<tgmath.h>//通用类型数学宏