目录

1. 编译指示

2. 声明性语句

3. 可执行语句

4. 简单语句

5. 复合语句

6. 控制语句

7. 函数

8. 类的定义和使用

9. 注释

请谨记


在介绍C++程序构成之前,我们先看一个简单Hello world的C++程序。Hello world 程序的源代码如下。为了方便描述,我们这里为Hello world程序加上行号。Hello world 虽然简单,但是它涵盖了C++程序所包含的所有组成。

//   最简单的Hello world示例程序,实现Hello world屏幕打印  C++语言的注释。
001  #include <iostream>  // 编译指示,告诉编译器在编译过程中所需信息的来源。003  using namespace std; // 声明性语句,using namestapce std; 是告诉编译器使用std命名空间。005  int  main(int argc, char * argv[])  // main 函数,每个C++程序都必须包含此main函数。
006  {
007      // 屏幕打印Hello world     C++语言的注释
008       cout << "Hello world!" << endl; // 可执行性语句
009       return 0;                      // main函数返回值。
010  }

我们先简单的概括一下C++程序构成:C++程序包含一个或多个函数,但是必须有一个main函数。操作系统通过调用main函数实现程序的执行,程序执行完毕后必须由main函数返回一个值给操作系统。在C++程序中可能还会包含编译指示,声明语句,类对象定义和使用等非必选项。

现在我们对照Hello world分析一下。

1. 编译指示

001行代码是一句“编译指示”,编译指示功能就是告诉编译器编译过程中所需要的一些信息。它们影响一个程序是否能被正确的编译,并在程序运行期造成影响。编译指示格式为:在新的一行中,以#开始并且不使用“分号”结束。

比如,Hello world实例:

#include<iostream>

就是告诉编译器,<iostream>中实现的对象在后续代码中可以使用,并且对后续代码造成输出Hello world影响。

2. 声明性语句

003行是一句“声明性语句”,声明性语句在作用上完全等同于“编译指示”:他们同样仅影响编译过程,但在编译结果中并不生成对应的指令。003行是一种声明性语句,常见的声明性语句还有下述这种。在一个cpp文件中定义,

int nValue  = 2;

在另外一个cpp文件中声明nValue变量,

extern int nValue;

extern int nValue; 也是声明性语句,在编译过程中不生成对应指令,只是告诉编译器nValue已经在别处定义了,你可以直接使用无需再次定义。

提示:声明性语句是C++的标准语句,只是它不生成指令。声明性语句在语法格式上和普通语句没有明显区别。

3. 可执行语句

007和008两行就是可执行语句。可执行语句和声明性语句一样都是C++的标准语句。但是与声明性语句不同,可执行语句在编译过程中生成对应的指令。可执行语句类似于自然语言中的句子,C++中有完成单一任务的简单语句,也有作为一个单元执行的一组语句组成的复合语句。还有条件分支语句和循环控制语句,所以可执行语句按照其功能可以分成:简单语句,复合语句,控制语句,try语句等。

说明:可执行语句是C++程序的主题,大型C++工程99%以上的代码都是可执行语句。

4. 简单语句

这种语句是最常用的一种语句形式。我们经常写的表达式语句,空语句都属于简单语句。通过简单语句可以完成某单一功能。如下面这行代码就完成两数的求和。

iVal = v1 + v2;

5. 复合语句

复合语句通常被称为块语句。使用花括号括起来的语句序列(可以为空),既一个复合语句或语句块。块标示了一个作用域,在块中引入的标识符名称只能在该块或该块嵌入的子块中可以访问,此语句块以外无法访问。

复合语句通常用在语法规则要求使用单个语句,但程序逻辑却需要不止一个语句的地方。下述代码就是一个标准的复合语句块。

{int iVal = 0;iVal = 1 + sum(1, 5);
}

此复合语句定义了一个只在此语句块可见的int变量iVal,然后将1和sun(1, 5)的和赋给iVal。在语句块之外iVal不可见。

6. 控制语句

控制语句完成程序的逻辑控制,常见的控制语句有if-else语句,for循环语句,while循环语句,do-while循环语句及goto语句等。这些语句主要完成程序逻辑和流程的控制。是C++语言的重要组成部分。

7. 函数

函数是C++程序的重要组成部分, C++的函数定义必须包含4个元素:返回类型,函数名称,圆括号内的形参表和函数体。这里所说的函数体指的是以花括号开始并以花括号结束的语句块。Hello world 程序中main函数就是C++的一个标准函数,main函数的返回类型为int,函数名称为main,形参表为空,函数体为大括号包含的006到010共5行语句。

函数的名称说明函数的功能,返回值返回函数执行后输出结果,形式参数表示函数的输入或输出。函数体决定函数的执行过程。在C++函数中有一个特别重要的关键字,用于在函数语句执行完之后返回结果给回调者。这个关键词就是“return”。一般函数定义格式如下:

返回类型  函数名称(形式参数1,形式参数2,…,形式参数n);
{return ;
}

为了描述的更加形象,现在我们看一个字符串输出打印函数,代码如下:

// 实现字符串打印输出
void StrPrint(char *pszPrtStr)  实现打印输出
{// 在屏幕上输出字符串。printf(“this string is %s\n”, pszPrtStr); // 在屏幕上输出字符串。return;
}

函数的函数名称为:StrPrint,意思为字符串打印函数。返回类型为void,表示返回类型为空类型。只有一个形式参数是指向字符串的指针pszPrtStr,类型为char *。

C++和C函数的区别:

  • C++的函数定义必须同时包含返回类型,函数名称,形参表格和函数体。但是在C++标准化之前返回类型不是必须的,如果一个函数缺少显示返回类型,函数的返回类型将被假定为int类型。
  • C语言的函数定义由于历史发展的原因可以没返回类型。如下述的Max函数在C语言编译器中编译时就是合法的。在标准化后的C++编译器中编译就是非法的。这儿需要说明的是C语言中如果一个函数没有返回值,默认返回int类型。
// 求两数的最大值
Max(int nA, int nB)
{return (nA > nB)?(nA):(nB);
}

8. 类的定义和使用

C++是一个面向对象的语言,类在C++中占用举足轻重的地位,占有主体的地位。一个类的定义包括类成员变量和类成员方法定义,后续章节会员专门的议题讨论类的定义和使用,在此例中cout就是一个类对象,使用此类对象我们可以完成数据的输出和显示功能。

9. 注释

注释顾名思义就是C++程序的解释。他不是C++程序的必须组成部分,但是重要组成部分。注释可帮助他人阅读程序,理解程序的意图。注释不会增加C++程序可执行程序的大小,因为在编译时编译器会忽略所有注释。

C++有两种类型的注释:单行注释和成对注释两种。

  • 单行注释以双斜线(//)开头,行中双斜线右方的所有内容就是注释,会被编译器忽略。

  • 成对注释指(/**/),从C语言继承而来,这种注释以/*开头,以*/结束。编译器把落入注释对/**/中的内容作为注释。注释对可以跨越程序的多行,但不是一定要如此。

注意:注释对不可嵌套,注释总是以/*开始并以*/结束。这意味着,一个注释对不能出现在另一个注释对中。

另外由注释对嵌套导致的编译器错误信息容易使人迷惑。所以在实际编程过程中需养成良好的编程习惯,禁止注释对嵌套。

请谨记

  • 一个C++程序是完成某一功能的一个整体,它由编译指示,执行性语句,声明性语句,函数及注释等组成。

  • 每个C++程序都必须有一个入口函数即main函数,这个函数的名称必须为main,返回类型必须为int。

使用经验 1 C++程序由哪些部分构成相关推荐

  1. 商业Web应用程序的用户界面设计

    商务Web应用程序的设计常常被人们所忽视.我看到许多程序,它们既不符合商业目标,也不满足用户需求,它们有很差的用户体验,并造成了商业利润的损失.更夸张的是,有些设计师根本没有参与整个程序的开发流程,而 ...

  2. 编程精粹 --Microsoft编写优质无错C程序秘诀

    献给我的妻子Beth, 以及我的双亲Joseph和Julia Maguire ────为了他们的爱和支持 序 1986年,在为几家小公司咨询和工作了10年之后为了获得编写Macintosh应用程序的经 ...

  3. Valgrind 快速入门

    1. 介绍 Valgrind工具组提供了一套调试与分析错误的工具包,能够帮助你的程序工作的更加准确,更加快速.这些工具之中最有名的是Memcheck.它能够识别很多C或者C++程序中内存相关的错误,这 ...

  4. WinLicense下载购买地址

    Themida是先进的微软视窗软件保护系统,专为了那WinLicense 结合了 Themida 保护功能以及高级注册管制.它提供了最强和具伸缩性的技术,使开发者可以安全地分发他们软件的试用版和完全版 ...

  5. 我的第一个Android应用BMI-深入浅出Android

    深入浅出 Android 1入门 .... 4 初探 Android .. 4 2008 年末最大的冲击 .... 4 Android 是什么 .... 4 从创意开始 .... 5 安装 Andro ...

  6. 新注册公众号没有留言评论功能怎么办?如何开通公众号留言功能?

    最近常常听自媒体人抱怨 "今年2月份注册了自己的微信公众号,就写写自己的小杂文啊.美妆种草啊之类的,但是一直没有留言功能.查了一下发现留言功能应该是基本自带的功能啊--为什么我的公众号没有呢 ...

  7. valgrind使用整理

    valgrind使用整理 时间:20180703 参考文献: https://www.cnblogs.com/AndyStudy/p/6409287.html  valgrind 工具介绍和简单的使用 ...

  8. Silverlight的未来[译文]

    自从微软专业开发者大会PDC10结束之后,网络上关于Silverlight被抛弃之说甚嚣尘上,拜读ZDNet访问BobMu的原文. Silverlight Team在2010年9月1日发表的博文&qu ...

  9. Silverlight的未来【转于博客园】

    Silverlight的未来 自从微软专业开发者大会PDC10 结束之后,网络上关于Silverlight被抛弃之说 甚嚣尘上,拜读ZDNet访问BobMu的原文 . Silverlight Team ...

最新文章

  1. 单臂路由与三层交换机实现VLAN通信
  2. 百度爬虫爬到虚拟链接 网站被黑_网站地图sitemap对SEO优化有什么作用?
  3. 动态添加 ajax,ajax动态的添加内容【原创】
  4. Qt知识点汇总——来自网络
  5. swift5自定义构造函数和自定义变量报required init?(coder: NSCoder) { fatalError(“init(coder:) has not bee错问题
  6. 数据库PowerDesigner创建图表(模块表分类)
  7. 【德国】德累斯顿工业大学 机器学习和图像分析研究助理/博士生 招生
  8. 【Flink】Flink 源码阅读笔记(16)- Flink SQL 的元数据管理
  9. requests 忽略证书
  10. spss可以关键词词频分析吗_有什么自动分词做词频分析的工具?
  11. java中while的用法案例_Java While循环 do-while循环用法
  12. matlab计算方阵对应特征值的特征向量
  13. 计算机打印机端口号,网络打印机端口号.doc
  14. ps基础知识学习总结
  15. dmidecode查看内存信息,服务器序列号,内存插槽信息
  16. 局域网传输工具需求分析
  17. 【Unity3D基础2-9】Unity3D烘焙系统的使用
  18. 跨域请求实现百度搜索和360搜索的智能提示
  19. lsf基础命令bsublmstatbjobs
  20. 安卓下的文件分享——FileProvider

热门文章

  1. 论文解读 Receptive Field Block Net for Accurate and Fast Object Detection
  2. 国标MPEG-PS实时流播放器开发(附例子)
  3. Redis 总结 —— 2022/2/6
  4. 决策树参数criterion
  5. LeetCode.868-二进制距离(Binary Gap)
  6. Linux下查看CPU信息[/proc/cpuinfo]
  7. 移动滑杆控制(UGUI实现)Unity3D
  8. c语言中begin用法,C++ set cbegin() 使用方法及示例
  9. Kubernetes学习-K8S安装篇-Kubeadm安装高可用K8S集群
  10. 设计模式六大原则——单一职责原则(SRP)