当前位置:   article > 正文

C++ 自学教程 LearnCPP 第1.1章 程序结构

learncpp

C++ 自学教程 第1.1章 程序结构

一段电脑程序是一系列指令,这些指令告诉电脑下一步应该做什么。程序通常由以下三个基本元素组成:表达式(expression),叙述(statement)和函数(function)。

叙述

叙述(或译为述句)是最常见的程序指令。C++中的叙述是其语言的最小独立单位。可类比于人类语言中的句子,可单独用来表达某个概念。在C++中,我们用叙述来向编译器表达我们想要完成某项任务。C++中的叙述通常(但不是总是)以分号结尾。

C++中有不同种类的叙述。比方说下面这几个常见的例子:

int x;
x = 5;
std::cout << x;
  • 1
  • 2
  • 3

int x;声明性叙述(declaration statement)。这个叙述告诉编译器x是个变量,并用于存储一个整数值。在编程中,变量相当于某块可用于存储数值的内存区域的名字。程序中所有变量在使用之前都必须被声明。这点等下马上还会讲。

x=5; 这个叙述语句将数值5赋值给了变量x,以便我们之后使用。

std::cout << x; 这句叙述将变量x的数值输出在屏幕上。

表达式

编译器同样可以理解表达式。表达式定义了某个需要被完成的计算/算式。比方说,我们在孩童时学过2+3等于5,我们也说2+3是个表达式,它的结果是5。

下列是不同类型的表达式:

"Hello, world"
x
2 + 3
x = 5
(2+x)*(y-3)
std::cout << x
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

你可能会注意到表达式中可含有字面值(比方说2,也就是整数2,或者’Hello World’代表一段文本。)表达式同样可含变量(比如说x,其数值等于对应内存中存储的数值),数学运算符号(比如+,代表加法运算),还能调用函数(之后会提到)。

比方说 x = 5(不带分号)就是个有效表达式,它将数字5赋值给x。

表达式不能独立被编译,他们应该在叙述中被使用。再拿x=5举例,编译器不能编译这个表达式,可能会报错(缺少一个分号)。

幸运的是,将表达式转化为叙述非常简单。一个表达式叙述就是表达式后加一个分号。因此,当你在x=5后加一个分号,这段程序就可以成功编译了。

有意思的事,一个叙述中可以含有多个表达式。在未来的课程里你将看见很多这样的例子。

函数

在C++中,多个叙述常常被打包成一个单元,这个单元又被称为函数。函数是一系列被依次执行的叙述语句。每一个C++程序都必须包括一个特别的函数:主要函数(main)。当C++程序运行的时候,程序从main函数的第一个叙述开始被执行。函数通常用来执行某项特定任务。几个例子,函数max可能包含一系列叙述语句来判断两个数字中那个更大。一个被叫做‘calculateGrade’的函数可能被用于计算一个学生的分数。这点以后还会分析。

提示:推荐把你的主函数存保存在名为main.cpp的文件或者跟你的项目同名的.cpp文件。比如你想编写一个象棋程序,你的主函数最好保存在chess.cpp里面。

库与C++标准库。

库(library)是一系列被预先编译的代码(比如函数)合集。它被打包好以供不同项目使用。库为你提供了一个拓展你的程序能力的常见方法。比方说,如果你想编写一个游戏程序,你可能需要将处理声音和图形的函数库。

C++的核心语言非常精短而简练(所以这个教程能教给你大部分的核心)。但是C++同时自带一个被称为C++标准库的函数库。C++标准库被划分成不同区域(或子库)。每一个区域/子库提供某项专门功能。C++标准库中最常用的就是iostream子库,其中包含了用户能在屏幕上输入或者显示控制台输出的相关功能。

“解剖一段小程序”

现在你已经理解了什么是表达式,叙述,函数和库。让我们来看看‘Hello World’这段小程序。

#include <iostream>

int main()
{
   std::cout << "Hello world!";
   return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第一行是一种特别叙述语句,又被称为预处理指令(preprocessor directives)。预处理指令让编译器执行某项特殊任务。在这个例子里面,它让编译器把iostream的头文件添加到我们的程序中,这样我们就可以使用iostream库里的各种函数,比如将文本输出到屏幕上。

第二行是分隔行,编译器会略过这行。

第三行声明了刚刚教过的主函数,这一步是必须的。每个程序都必须含有一个主函数。
第四行和第七行告诉编译器那一部分是主函数。在两个花括号之间的内容都被认为是主函数的组成部分。

第五行是第一个叙述(很明显,它的结尾是分号),也是个表达式叙述。std :: cout是个特别的对象,它代表着控制台/屏幕。<<符号是被称为输出算子的运算符号。std :: cout知道所有它接收的东西都应该被显示在屏幕上。在这个例子中,我们将文本’Hello world’输出给屏幕。

第六行是一种新的叙述,被称为返回值叙述。当一段可执行程序完成运行,主函数会向操作系统返回一个值。这个数值代表了程序是否成功运行。

这个返回值叙述将数值0返回给操作系统,也就是说“一切顺利!”。所有非零的数值通常都代表着有东西出错了,程序必须被中途终止。等下讨论函数的时候会讲到具体的。

未来我们写的程序都遵循这个模板,或者类似这个模板。

后面的章节会探讨每一行的具体细节。

语法和语法错误

你在学校可能学到过,在英语中,句子的构造遵从特定的语法规范。比方说句子用句号结尾。这种规范就被称为语法(syntax)。如果你写了两个句子中间没有用句号分隔,就是违背了英语的语法。

C++也有特定的语法:决定构建有效程序的规范。当你编译程序的时候,编译器有责任确保你的程序遵从了C++语法。如果你违背了任何规范,编译器会报错,也就是语法错误(syntax error )

举个例子,你刚刚学过许多叙述都需要用分号结尾。

让我们看看如果我们省去一个分号会发生些什么:

#include <iostream>

int main()
{
   std::cout << "Hello world!"
   return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Visual studio 会生成下面的错误警报:

c:\users\apomeranz\documents\visual studio 2013\projects\test1\test1\test1.cpp(6): error C2143: syntax error : missing ‘;’ before ‘return’

这个错误消息的意思是你在第六行有个语法错误:你在 返回值前面忘了个分号。在这个例子里错误其实在第五行。通常情况下编译器能精确定位错误。但是有时候它可能不到下一行都没意识到这里有一个错误。

语法错误在程序很常见。幸运的是,他们通常能被简单的修复。必须所有语法错误都被修正后程序才能被编译。


说明: 这系列笔记是基于网上一个英文教程LearnCPP

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/474891
推荐阅读
相关标签
  

闽ICP备14008679号