3-C++程序的结构1.5
多文件结构和编译预处理命令
1、c++程序的一般组织结构
通常一个项目至少划分为三个文件:类定义文件(*.h文件)、类实现文件(*.cpp文件)和类的使用文件(*.cpp,主函数文件)。如下:



这三个单独的源文件构成,他们的相互关系和编译、连接过程,如下

2、外部变量和外部函数
a、为了使变量除了在定义它的文件中使用外,还要被其他文件使用,可以将其声明为外部变量,用extern关键字。
外部变量时具有文件作用域的变量,定义在所有文件之外。声明一个外部变量时,可以同时定义它,也可以只是引用一个在别处声明的外部变量。
定义一个文件作用域的变量时,其默认状态是可以为不同的编译单元(即源文件)所共享的,只要在其他编译单元在中冠以extern声明该变量即可。
b、外部函数
在所有类之外声明的函数(非成员函数),都是具有文件作用域的,如果没有特殊说明,这样的函数都可以在不同的编译单元中被调用,只要在调用之前函数原型即可。
3、标准c++库和命名空间
在c语言中系统函数和一些宏定义都放置在运行库中,c++的库中除了继续保留了c语言系统函数外,还加入了预定义的模板和类。标准c++类库是一个极为灵活并可扩展的可重用软件模板的集合。标准c++类与组件在逻辑上分为6中类型:
输入/输出类
容器类与ADT(抽象数据类型)
存储管理类
算法
错误处理
运行环境支持
对于库中预定义内容的说明分别存在于不同的头文件中,要使用这些预定义的成分,就要将相应的头文件包含到圆程序中。不同的编译系统,库和头文件都会略有不同。
4、编译预处理
编译器在对源程序进行编译之前,首先要由预处理程序对程序文本进行预处理。预处理程序提供了一组编译预处理指令和预处理操作符。
a、#include指令
也称为文件包含指令,其作用是将另一个源文件嵌入到当前源文件中该点处。有两种格式:#include<文件名>和#include"文件名"
b、#define 和#undef指令
在c语言中,还可以使用#define来定义带参数宏,以简单实现函数的计算,而在c++中这一功能已被内联函数取代。
#undef的作用是删除#define定义的宏,使之不再起作用。
c、条件编译
形式1
#if 常量表达式 //当常量表达式为非零时,编译本程序段
程序段
#endif
形式2
#if 常量表达式
程序段1
#else
程序段2
#endif
形式3
#if 常量表达式1
程序段1
#elif 常量表达式2
程序段2
....
#elif 常量表达式n
程序段n
#else
程序段n+1
#endif
形式4
#ifdef 标识符
程序段1
#else
程序段2
#endif
如果标识符经#define定义过,且未经undef删除,则编译程序段1,否则,编译程序段2
形式5
#ifndef 标识符
程序段1
#else
程序段2
#endif
与形式4相反
4、defined操作符
它是一个预处理操作符,而不是指令,因此不要加#开头,defined操作符使用的形式为:defined(标识符)
若标识符在此前经#define定义过,未经删除,则上述表达式为非0.否则上述表达式的值为0.
由于文件包含指令可以嵌套使用,在设计程序是要避免多次重复包含同一个头文件,否则会引起变量及类的重复定义。
一般会在头文件中加上
//head.h
#ifndef HEAD_H
#define HEAD_H
.......
首先判断HEAD_H是否定义过,没有则是第一次编译,如果定义过就说明已经参加过编译了。
3-C++程序的结构1.5的更多相关文章
- ELF Format 笔记(十一)—— 程序头结构
ilocker:关注 Android 安全(新手) QQ: 2597294287 程序头表 (program header table) 是一个结构体数组,数组中的每个结构体元素是一个程序头 (pro ...
- 黑马程序员——JAVA基础之程序控制流结构之判断结构,选择结构
------- android培训.java培训.期待与您交流! ---------- 程序控制流结构:顺序结构:判断结构:选择结构:循环结构. 判断结构:条件表达式无论写成什么样子,只看最终的结构是 ...
- Delphi XE5教程5:程序的结构和语法
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...
- 【Xamarin挖墙脚系列:Xamarin.IOS的程序的结构】
原文:[Xamarin挖墙脚系列:Xamarin.IOS的程序的结构] 开始熟悉Xamarin在开发IOS的结构!!!!!!! 先看官方 这个是以一个单页面的程序进行讲述的. 1 程序引用的程序集,核 ...
- 【Xamarin挖墙脚系列:典型的业务程序的结构搭建】
原文:[Xamarin挖墙脚系列:典型的业务程序的结构搭建] 其实app就是客户端.在现代的程序中,都是典型的C/S结构.当然,一些离线的小游戏,功能性应用除外,如:电话本,通信录,短信查看等等 这个 ...
- 微信小程序开发01 --- 微信小程序项目结构介绍
一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...
- 毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构
VHDL入门知识学习(一) VHDL程序基本结构 简介 VHDL程序基本结构 简介 概念: HDL-Hardware Description Language-硬件描述语言-描述硬件电路的功能.信号连 ...
- Java程序的结构和执行
目录 Java程序的结构 Java程序的执行 source code -- compiler -- class file -- JVM compiler JVM Java语法 数据类型 数据的存储 堆 ...
- Android应用程序项目结构
Android应用程序项目结构 [src]:JAVA源代码目录 [gen]:由系统自动生成的JAVA源码文件,不可修改,只可查看和使用 加载的和依赖的类库 [assets]:本地存储文件的一个文件夹 ...
- C语言基础知识-程序流程结构
C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...
随机推荐
- wamp环境配置;转自发瑞的博客(www.cnblogs.com/cyrfr/p/6483529.html)
php手动搭建环境有好多种组合,版本号不一致,会导致搭建失败. 我搭建的组合是: php5.6+MySQL5.6+Apache2.4的组合. 一.PHP语言包下载 首先从官网上下载php5.6 htt ...
- mongo数据库中一条记录中某个属性是数组情形时 数据结构的定义
package entity; import java.util.Date; import com.mongodb.BasicDBList;import com.mongodb.DBObject; p ...
- Swift 学习笔记 (类和结构体)
类和结构体是一种多功能且灵活的构造体.通过使用与现存常量 变量 函数完全相同的语法来在类和结构体中定义属性和方法以添加功能. Swift中不需要你为自定义的类和结构体创建独立的结构和实现文件.在Swi ...
- 题解 P3389 【【模板】高斯消元法】
题解 P3389 [[模板]高斯消元法] 看到大家都没有重载运算符,那我就重载一下运算符给大家娱乐一下 我使用的是高斯-约旦消元法,这种方法是精度最高的(相对地) 一句话解释高斯约旦消元法: 通过加减 ...
- Java图像处理最快技术:ImageJ 学习第一篇
ImageJ是世界上最快的纯Java的图像处理程序. 它能够过滤一个2048x2048的图像在0.1秒内(*). 这是每秒40万像素!ImageJ的扩展通过使用内置的文本编辑器和Java编译器的Ima ...
- SAP 增强表MODSAP 和TFDIR
2.第二代增强(基于函数模块的增强),用于SMOD和CMOD 维护 在SAP发布的版本中,使用Call customer-function 'xxx'调用函数模块的, 所以你可以通过在程序中搜索 cu ...
- update module (更新模块)
[转自http://blog.csdn.net/zhongguomao/article/details/6712568] function module:更新程序必须用一个特殊的FM(update m ...
- spring-boot2代码
App.java package com.kfit; import org.springframework.boot.SpringApplication; import org.springframe ...
- Dictionary and KeyValuePair关系
简单一句话: Dictionary 是 由 KeyValuePair结构 组成的集合 The Dictionary<TKey, TValue>.Enumerator.Current pro ...
- Java接口 详解(一)
一.基本概念 接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合.接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 如果一个类只由 ...