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是否定义过,没有则是第一次编译,如果定义过就说明已经参加过编译了。

时间: 2024-08-08 00:35:36

3-C++程序的结构1.5的相关文章

Java程序基本结构(一)

先来吐槽下,算是空闲时间来继续写博客之旅,记录点点滴滴.说是开始着手写Java系列的文章,可是坑货儿的公司第二天就派我出差了,一搞就一个星期,而且更坑的是出差住的地方竟然是老板在出差地方买的房子,房子装修滴垃圾,而且连热水都没有(因为常年没人在那住),洗澡都是一个问题,最让人受不了的是晚上还要义务的做事,把我自己的时间都给占用(搞到晚上十一点才睡觉),因为老板比较的抠,他和我们(还有一个和我一起出差滴)一起过来滴,是盯着我们啊.fuck,我心里一肚子的火,可是没办法啊,如今常流行说遇到这样的老板

c语言学习之 程序基本结构

一个最基本的C程序由五个部分组成: 头文件 (Preprocessor commands) 函数 (function) 变量 (variable) 语句块 (statement 和 expression) 注释 (comments) 例如: #include <stdio.h> int main(){ /*my first c programming*/ printf("hello,world\n"); return 0; } c语言学习之 程序基本结构,码迷,mamico

一、程序基本结构

#region 导入命名空间 using System; using System.Collections.Generic; using System.Linq; using System.Text; #endregion // 声明命名空间 namespace _1.程序基本结构 {     /// <summary>     /// 声明一个类     /// </summary>     class Program     {         /*           * M

8.15 号 程序 选择结构作业的代码

/* 任意输入三个整数,按从大到小的顺序输出. */ #include <stdio.h> void main() { int num1,num2,num3,tmp; printf("输入任意3个整数:逗号分隔\n"); scanf("%d,%d,%d",&num1,&num2,&num3); if(num1 < num2) { tmp = num1; num1 = num2; num2 = tmp; } if(num1 &

8.15 号 程序 循环结构作业的代码

/*循环结构的演示题*/ #include <stdio.h> void main() { /* int i = 0; while(i < 100) { printf("第%-3d句:I LOVE You!\n",++i); } */ /* int order = 1; while(order != 0) { printf("I Love You!\n"); printf("还要我说一遍吗?(输入0结束)"); scanf(&q

可运行程序的结构

可运行程序的结构: 1.首先, 我们知道编程就是在写数据和处理数据的逻辑 2.一个应用程序编译以后, 得到可运行文件,这个文件就分为: 代码区, 常量区双击这个程序, 在宿主系统上会有一个应用程序载入器的软件.该程序会载入应用程序到内存中.载入内存中的时候, 程序中的全局变量, 常量等数据就開始载入. 3.内存划分为: 代码区(段), 常量区(段), BSS段, 堆区, 栈区 4.代码区存储的是代码相应的机器指令 5.常量区存储的是程序中全部的常量 6.BSS段, 用来存储全局的变量的值 7.堆

seci-log 1.13 发布 简化了安装和程序底层结构做了调整

日志分析软件 seci-log 1.13发布,简化了安装和程序底层结构做了调整.上篇文章1.12,有兴趣可以了解一下.本次升级合并了linux和windows版本.这两个版本都为绿色版本(需要提前安装java 1.7版本),放到任意目录下都可以,如果正式使用建议放到磁盘空间大的磁盘中. 本次升级简化了安装,只依赖java 1.7,日志数据只存储到es中,去掉了mysql数据库,这样就不用安装mysql了,同时得到另外的一个有优势数据占用空间减少了一半多,因为同样一条记录,mysql存储空间要大于

黑马程序员------C 语言学习笔记---程序基本结构

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 第二  程序基本结构 一 分支结构 01 单分支结构 格式: if(表达式) { 语句: } 其中,“表达式”为判断条件,只要表达式的值不为0,就认为条件成立. 02 双分支结构 格式: if(表达式) 语句1: else 语句

c++程序流程结构(顺序、选择、循环)break、continue

程序流程结构分类 从上到下就是顺序结构 选择结构 if语句.if-else语句(三目运算符 a>b?a:b).if -else if-else语句. switch语句 int main() { int a = 10; switch (a) { case 1: cout << "111"; break; case 2: cout << "222"; break; case 3: cout << "333";

Golang学习笔记(1)---go程序一般结构

Go程序是通过 package来组织的(与python的库类似) 只有package名称为main的包可以包涵main函数(同时main函数也是一个程序的入口) 一个可执行程序有且仅有一个main包 通过import关键字来引入其他非main包 通过const关键字来进行常量的定义 通过在函数体外部使用var关键字来进行全局变量的声明与赋值 通过type关键字来进行结构(struct)或接口(interface)的声明----一般(自定义)类型 通过func关键字来进行函数的声明 一般格式为: