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”启动.执行. 库源码文件 测试源码文件 面试题:命令源码文件的用途是什么,怎样编写它? 典型回答: 命令源码文 ...
随机推荐
- SGU 168
SGU 168,寻找矩阵中右上方,右方,下方最小的元素,采用动态规划解答. #include <iostream> #include <vector> #include < ...
- VS下遇到未能加载文件或程序集 错误
这个的错误原因可能是在64的系统上编译32位的应用程序,遇到这个错误,可以通过下面的手段解决! 1.关闭Visual Studio. 2. 在Visual Studio Tools子目录,以管理员身份 ...
- Java API ——StringBuffer类
1.StringBuffer类概述 1)我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间.而StringBuffer就可以解决这个问题 2)线程安全的可变字 ...
- xml格式化
Vim怎么格式化xml,完全不会,vim的缩进也搞不明白
- PHP实现浏览历史记录
http://www.3a88.com/service/206.html http://www.1360.cc/ZhanChangJiaoCheng/6831.html http://www.osch ...
- git commit 之后 push 之前,想删除 个别的commit 文件
git rm --cached <file_name> git commit "删除了<file_name>文件" git rm --cached < ...
- CPU占用率高分析方法步骤[转载]
由于涉及到私有代码,所有图片都隐去 1.执行TOP命令,确认CPU占用较高的进程PID 根据top命令,发现PID为8691的Java进程占用CPU高达3858%,出现故障 2.确认该进程中CPU占用 ...
- MySql命令的基本操作
MySQL的基本命令: 登录:mysql -h -u root -p password:*****; 例如:mysql -h127.0.0.1 -uroot -p 增加一个用户: grant all ...
- UVa 442 (栈) Matrix Chain Multiplication
题意: 给出一个矩阵表达式,计算总的乘法次数. 分析: 基本的数学知识:一个m×n的矩阵A和n×s的矩阵B,计算AB的乘法次数为m×n×s.只有A的列数和B的行数相等时,两个矩阵才能进行乘法运算. 表 ...
- 【转】Please define the NDK_PROJECT_PATH variable to point to it
原文网址:http://blog.csdn.net/yuanjingjiang/article/details/34857623 Please define the NDK_PROJECT_PATH ...