21天学通C++读书笔记(一:C++程序的组成部分)

本系列为本人学习21天学通C++这本书的读书笔记,这是一本C++入门的好书(一本被书名耽误的好书)。

1. 编写C++应用程序

1.1 生成可执行文件的步骤
  • 使用文本编辑器编写C++代码。
  • 使用C++编译器对代码进行编译,将代码转换为包含在目标文件中的机器语言版本。
  • 使用链接器链接编译器的输出,生成一个可执行文件(如Windows中的.exe文件)
1.2 编写第一个C++应用程序
#include <iostream>

int main(int argc, char *argv[]) {
    std::cout << "Hello World!" << std::endl;
    return 0;
}
1.3 生成并执行第一个C++应用程序
  • 如果您使用的是Linux 系统,请打开终端,切换到文件Hello.cpp 所在的目录,再使用如下命令行调用g++编译器和链接程序:
g++ -o hello Hello.cpp
  • 该命令行让g++编译C++文件Hello.cpp,并创建一个名为hello的可执行文件。
Q&A
  • 解释型语言与编译型语言有何不同?

    • 诸如Windows Script等语言是解释型的,不需要编译。解释型语言使用解释器,解释器直接读取脚本文件(代码)并执行指定的操作。因此,要在计算机上执行脚本,必须安装解释器。在运行阶段,解释器在微处理器和代码之间充当翻译,因此性能通常会受到影响
  • 什么是运行时错误?它与编译时错误有何不同?

    • 执行应用程序时发生的错误称为运行时错误。在较旧的Windows版本中,您可能遇到过臭名昭著的“非法访问(Access Violation)”错误,它就是运行时错误。最终用户不会遇到编译时错误,这种错误表明程序存在语法问题,会禁止程序员生成可执行文件
  • 解释器和编译器有何不同?链接器的作用是什么?

    • 解释器是一种对代码(或字节码)进行解释并执行相应操作的工具;编译器将代码作为输入,并生成目标文件。就C++而言,编译和链接后,将得到一个可执行文件,处理器可直接执行它,而无需做进一步解释
    • 编译器将C++代码文件作为输入,并生成一个使用机器语言的目标文件。通常,您的代码依赖于库和其他代码文件中的函数。链接器负责建立这些链接,并生成一个可执行文件,它集成了您指定的所有直接或间接依存关系

2. C++程序的组成部分

2.1 Hello World程序的组成部分
2.1.1 预处理器编译指令#include
  • 预处理器是一个在编译前运行的工具。预处理器编译指令是向预处理器发出的命令,
    总是以磅字符#打头
  • 如果需要在FileA 中使用FileB中定义的元素,就需要在前者中包含后者。为此,通常在FileA 中使用如下include语句:
#include "...relative path to FileB\FileB" // 这里使用引号而不是尖括号来包含自己创建的头文件。尖括号(<>)通常用于包含标准
头文件。
2.1.2 程序的主体—main( )
  • 在很多C++应用程序中,都使用了类似于下面的main( )函数变种:
int main (int argc, char* argv[]) // 括号内的内容是提供给程序的参数
  • cout(控制台输出)是将Hello World显示到控制台(即屏幕)的语句
  • cout是在名称空间std中定义的一个流(因此这里使用了std::cout),这里使用流插入运算符<<将文本Hello World放到这个流中
  • std::endl用于换行,将其插入流中相当于插入回车
std::cout << "Hello World" << std::endl; // 实际文本(包括引号)“Hello World”被称为字符串字面量
2.1.3 返回值
  • 在C++中,除非明确声明了不返回值,否则函数必须返回一个值
  • 在很多情况下,一个应用程序被另一个应用程序启动,而父应用程序(启动者)想知道子应用程序(被启动者)是否成功地完成了其任务。程序员可使用main( )的返回值向父应用程序传递成功或错误状态
  • 根据约定,程序员在程序运行成功时返回0,并在出现错误时返回−1。然而,返回值为
    整数,程序员可利用整个整数范围,指出众多不同的成功或失败状态
2.2 名称空间的概念
  • 在第一个程序中,使用的是std::cout而不是cout,原因在于cout位于标准(std)名称空间中;名称空间是给代码指定的名称,有助于降低命名冲突的风险
// using namespace 声明
#include <iostream>
    
int main() {
    using namespace std;
    
    cout << "Hello World" << endl;
    return 0;
}
// 关键字using
#include <iostream>
    
int main() {
    using std::cout;
    using std::endl;
    
    cout << "Hello World" << endl;
    return 0;
}
2.3 C++代码中的注释

C++支持两种风格的注释。

  • //指出从这里开始到行尾都为注释
  • /* */表示它们之间的文本为注释,即便这些文本跨越多行
2.4 C++函数
  • 函数让您能够将应用程序划分成多个功能单元,并按您选择的顺序调用
  • 最著名的函数无疑是int main( ),它被编译器视为C++应用程序的起点,必须返回一个int(即整数)
// 声明、定义和调用函数
#include <iostream>
using namespace std;

// 函数声明
int DemoConsoleOutput();

int main() {
    // 函数调用
	DemoConsoleOutput();

	return 0;
}

// 函数定义
int DemoConsoleOutput() {
	cout << "This is a simple string literal" << endl;
	cout << "Writing number five: " << 5 << endl;
	
	return 0;
}
2.5 使用std::cin 和std::cout 执行基本输入输出操作
  • 要将简单的文本数据写入到控制台,可使用std::cout;要从控制台读取文本和数字,可使用std::cin
// cin 的用法
std::cin >> Variable; // 提取运算符>>(从输入流中提取数据)
Q&A
  • #include 的作用是什么?

    • 这是一个预处理器编译指令。预处理器在您调用编译器时运行。该指令使得预处理器将include后面的<>中的文件读入程序,其效果如同将这个文件输入到源代码中的这个位置。
  • 什么情况下需要命令行参数?

    • 需要提供让用户能够修改程序行为的选项时。例如,Linux命令ls和Windows命令dir都显示当前目录(文件夹)的内容,要查看另一个目录中的文件,需要使用命令行参数指定相应的路径,如ls /或dir \。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值