C++语言导学 第一章 基础知识 - 1.2 程序

第一章 基础知识

1.2 程序

C++是一种编译型语言。为了让程序运行,首先要用编译器处理源代码文本,生成目标文件,然后再用连接器将目标文件组合成可执行程序。一个C++程序通常包含多个源代码文件,通常简称为源文件(source file)。
C++语言导学 第一章 基础知识 - 1.2 程序
可执行程序都是为特定的硬件、系统组合创建的,不具可移植性。比如说,Mac上的可执行程序就无法移植到windows PC上。当谈论C++程序的可移植性时,通常是指源代码的可移植性,即源代码可以在不同系统上成功编译并运行。

ISO的C++标准定义了两类实体:

  • 核心语言特性(core language feature),例如内置类型(如char和int)和循环(如for语句和while语句);
  • 标准库组件(standard-library component),比如容器(如vector和map)和I/O操作(如<<和getline())。

每个C++实现都提供标准库组件,它们其实也是非常普通的C++代码。换句话说,C++标准库可以用C++语言本身实现(仅在实现线程上下文切换这样的功能时才使用少量机器代码)。这意味着C++在面对大多数高要求的系统编程任务时既有丰富的表达力,同时也足够高效。

C++是一种静态类型语言,这意味着任何实体(如对象、值、名称和表达式)在使用时都必须已被编译器了解。对象的类型决定了能在该对象上执行的操作。

Hello, World!

最小的C++程序如下所示:

int main(){}	//最小的C++程序

这段代码定义了一个名为main的函数,该函数既不接受任何参数,也不做什么实际工作。

在C++中,花括号{ }表示成组的意思,上面的例子里,它指出函数体的首尾边界。从双斜线//开始直到该行结束是注释,注释只供人阅读和参考,编译器会直接略过注释。

每个C++程序必须有且只有一个名为main()的全局函数,它是程序执行的起点。如果main()返回一个int整数值,则它是程序返回给“系统”的值。如果main()不返回任何内容,则系统也会收到一个表示程序成功完成的值。main()返回非零值表示程序执行失败。并非每个操作系统和执行环境都会利用这个返回值:基于Linux/Unix的环境通常会用到,而基于Windows的环境很少会用到。

通常情况下,程序会产生一些输出。例如,下面这个程序输出 Hello, World!:

#include <iostream>
int main()
{
	std::cout<<”Hello, World!\n”;
}

#include这一行指示编译器把iostream中涉及的标准流I/O设施的声明包含(include)进来。如果没有这些声明的话,表达式

std::cout<<”Hello, World!\n”;

无法正确执行。运算符<<(“输出”)把它的第二个参数写入到第一个参数。在这个例子里,字符串字面值“Hello, World!\n”被写入到标准输出流std::cout。字符串字面值是指被一对双引号包围的字符序列。在字符串字面常量中,反斜线\紧跟另一个字符组成一个“特殊字符”。在这个例子中,\n是换行符,因此最终输出结果是Hello, World!后跟一个换行。

std::指出名字cout可在标准库名字空间中找到。本书在讨论标准特性时通常会省略掉std::,3.4节将介绍不使用显示限定符而让名字空间中的名字可见。

基本上所有可执行代码都要放在函数中,并且被main()直接或间接地调用。例如:

#include <iostream>			//包含(“引入”)I/O流库的声明
using namespace std;		//使得std中的名字变得可见,而无须再使得std::

double square(double x)		//计算一个双精度浮点数的平方
{
	return x*x;
}

void print_square(double x)
{
	cout<<“the square of ”<<x<<“ is ”<<square(x)<<”\n”;
}

int main()
{
	print_square(1.234);	//打印:the square of 1.234 is 1.52276
}

“返回类型”void表示函数print_square()不返回任何值。

上一篇:奇数魔方阵(经典算法)


下一篇:python map函数