C++学习笔记(一):头文件和源文件
说明:
当一个源文件(a.cpp)要调用另一个源文件(b.cpp)定义的方法时,需要在a.cpp中写上这个方法的声明(只需要该方法的名称、返回值和参数,类似Java的接口);
如果每次调用其他文件的方法时都写上相同的声明就会很麻烦,而且当b.cpp的定义修改时所有调用到该文件的声明都要修改,这样工作量太大且容易出错,所以出现了头文件,我们把所有的声明都存放到头文件中,需要使用到的时候使用宏命令“#include”包含进这个.cpp文件中即可;
#include:只有一个功能:把它后面所写的那个文件的内容,完完整整地、一字不改地拷贝到当前的文件中来;
而C++规定,定义只有一次,声明可以多次,导致头文件只能写声明,不能进行定义,如果头文件进行定义,被多个文件#include后,就会出现多个定义导致编译失败;
头文件不会进行编译,只会通过#include被其他多个源文件包含,然后头文件中的内容作为源文件的一部分进行编译;
需要注意的是,.h头文件不用写在编译器的命令之后,但它必须要在编译器找得到的地方、通常是和源文件位于同一个目录下;
头文件的后缀名可用任意名称;
预处理程序:
预处理程序包含3种,分别是:宏定义、文件包含和条件编译。
宏定义:
宏定义使用“#define”后跟定义的字符串,宏定义的字符串会在编译时直接进行文本替换。
#define PI 3.14159
在程序中遇到的所有PI字符串都会被替换为3.14159。
文件包含:
文件包含有两种形式,其含义是讲制定的文件的内容拷贝到当前文件中。
#include "filename"
#include <filename>
使用尖括号表示使用系统的文件,使用双引号表示在当前目录下进行查找(包含子目录),当然除了填写相对路径外还可以填写绝对路径。
条件编译:
#ifndef COMDEF_H
#define COMDEF_H //头文件内容 #endif
使用上述宏命令可以使头文件的内容只被执行一次;
要达到上面的目的还可以使用另一种方法:
#pragma once
注意:#ifndef需要避免同名的问题,但是该方法所有编译器都支持,而#pragma once可以避免命名的问题但是只有较新的编译器支持。
extern:
extern关键字指定当前的内容为声明;
double up;//定义了up变量,并且赋值为0
extern double up;//声明了外部的变量up,不会分配内存
函数的声明extern关键词是可有可无的,因为函数本身不加修饰的话就是extern的;
例外:
const对象可以直接定义在头文件中;
内联函数也可以直接定义在头文件中;
类的定义放在头文件中,而类的函数成员的实现代码放在一个.cpp文件中;
C++学习笔记(一):头文件和源文件的更多相关文章
- 理解C++中的头文件和源文件的作用【转】
一.C++编译模式通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C+ ...
- C++基础之头文件和源文件的关系
今天找了个解析xml的开源C++项目tinyxml,按照网上的说法去编译,但是一直编译不通过,"无法打开头文件tinyxml.h",但是明明我在工程底下有了这个文件,对于我这种初学 ...
- Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- 万恶技术系列笔记-jupyter工作路径和源文件打开方式
万恶技术系列笔记-jupyter工作路径和源文件打开方式 脚本文件,ipynb的正确打开姿势: ipynb不能直接打开,需要复制到工作路径.例如 10_monkeys_model_1.ipynb ...
- idea 开发javaee 时,出现访问的文件和源文件不一样,没有正常更新的解决方案
这是因为我配置的idea debug 运行模式 输出的文件在 out 和 target 目录下,因为idea本身的原因,导致这两个目录没有及时更新, 导致前端在访问时的页面源码和ide中的一直不一样, ...
- 学习:C++中的头文件和源文件详解
一.C++编译模式: 通常,在一个C++程序中,只包含两类文件――.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是 ...
- android学习笔记36——使用原始XML文件
XML文件 android中使用XML文件,需要开发者手动创建res/xml文件夹. 实例如下: book.xml==> <?xml version="1.0" enc ...
- Linux学习笔记14——使用fcntl实现文件锁定
期末考试快要来了,Linux学习进度一下拉下来许多.今天学习的是文件锁定,在Linux中,实现文件锁定的方法很多,例如fcntl和lockf.下面主要是fcntl的调用. fcntl函数的原型是:in ...
- [Golang学习笔记] 02 命令源码文件
源码文件的三种类型: 命令源文件:可以直接运行的程序,可以不编译而使用命令“go run”启动.执行. 库源码文件 测试源码文件 面试题:命令源码文件的用途是什么,怎样编写它? 典型回答: 命令源码文 ...
随机推荐
- 关于MIM金属注射成型技术知识大全
1.什么是MIM MIM即(Metal Injection Molding)是金属注射成型的简称.是将金属粉末与其粘结剂的增塑混合料注射于模型中的成形方法.它是先将所选粉末与粘结剂进行混合,然后将混合 ...
- QT中16进制字符串转汉字
最经在研究AT指令接受短信,短信是unicode编码,接受后需要根据系统的编码方案进行相关的转码比如接受到了一串字符4F60597D,它是“你好”的unicode编码,一个unicode编码占两个字节 ...
- Windows10搭建PHP7开发环境
原文:Windows10搭建PHP7开发环境 3年前写了一篇<Windows下搭建PHP开发环境>之后就再也没有碰过PHP了,最近新发布了PHP7然后回去看了一下之前写的文章,发现很多配置 ...
- 12232 - Exclusive-OR
12232 - Exclusive-OR 题目大意是可以设定一个点Xp=v,或者Xp^Xq=v,然后查询Xa^Xb^Xc...等于多少. 由于异或操作跟判连通性很类似,这里可以使用并查集来解决,对于X ...
- java 死锁及解决
Java线程死锁如何避免这一悲剧 Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键.不幸的是,使用上锁会带来其他问题.让我们来看一些常见问题以及相应的解决方法: Jav ...
- vijosP1026毒药?解药?
hash. 怎么感觉叫状态压缩bfs比较合适呢? #include<cstdio> #include<algorithm> #include<cstring> us ...
- RPC之——HTTP协议栈
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52531185 今天,给大家带来一篇稍有深度的文章——<RPC之——HTTP协 ...
- Birt时间参数添加My97日历控件
首先,思路: 引用My97.js然后为时间参数的textbox添加onclick事件 1.将My97添加到项目中的webcontent目录下(如图:) 2.添加My97引用 在项目路径下找到该文件\w ...
- 多线程程序设计学习(12)Thread-soecific storage pattern
Thread-Specific-Storage[线程保管箱] 一:Thread-Specific Storage的参与者--->记录日志的线程(ClientThread)--->负责获取不 ...
- 常用高度——获取浏览器窗口的高度(jquery和js)
一:针对浏览器的常用高度 jquery的用法: <script type="text/javascript"> $(document).ready(function() ...