本系列为本人学习21天学通C++这本书的读书笔记,这是一本C++入门的好书(一本被书名耽误的好书)。
1. 编写C++应用程序
1.1 生成可执行文件的步骤
- 使用文本编辑器编写C++代码。
- 使用C++编译器对代码进行编译,将代码转换为包含在目标文件中的机器语言版本。
- 使用链接器链接编译器的输出,生成一个可执行文件(如Windows中的.exe文件)
1.2 编写第一个C++应用程序
#include
int main(int argc, char *argv[]) {
std::cout << "Hello World!" << std::endl;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
1.3 生成并执行第一个C++应用程序
- 如果您使用的是Linux 系统,请打开终端,切换到文件Hello.cpp 所在的目录,再使用如下命令行调用g++编译器和链接程序:
g++ -o hello Hello.cpp
- 1
- 该命令行让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" // 这里使用引号而不是尖括号来包含自己创建的头文件。尖括号(<>)通常用于包含标准
头文件。
- 1
- 2
2.1.2 程序的主体—main( )
- 在很多C++应用程序中,都使用了类似于下面的main( )函数变种:
int main (int argc, char* argv[]) // 括号内的内容是提供给程序的参数
- 1
- cout(控制台输出)是将Hello World显示到控制台(即屏幕)的语句
- cout是在名称空间std中定义的一个流(因此这里使用了std::cout),这里使用流插入运算符<<将文本Hello World放到这个流中
- std::endl用于换行,将其插入流中相当于插入回车
std::cout << "Hello World" << std::endl; // 实际文本(包括引号)“Hello World”被称为字符串字面量
- 1
2.1.3 返回值
- 在C++中,除非明确声明了不返回值,否则函数必须返回一个值
- 在很多情况下,一个应用程序被另一个应用程序启动,而父应用程序(启动者)想知道子应用程序(被启动者)是否成功地完成了其任务。程序员可使用main( )的返回值向父应用程序传递成功或错误状态
- 根据约定,程序员在程序运行成功时返回0,并在出现错误时返回−1。然而,返回值为
整数,程序员可利用整个整数范围,指出众多不同的成功或失败状态
2.2 名称空间的概念
- 在第一个程序中,使用的是std::cout而不是cout,原因在于cout位于标准(std)名称空间中;名称空间是给代码指定的名称,有助于降低命名冲突的风险
// using namespace 声明
#include
int main() {
using namespace std;
cout << "Hello World" << endl;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
// 关键字using
#include
int main() {
using std::cout;
using std::endl;
cout << "Hello World" << endl;
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2.3 C++代码中的注释
C++支持两种风格的注释。
- //指出从这里开始到行尾都为注释
- /* */表示它们之间的文本为注释,即便这些文本跨越多行
2.4 C++函数
- 函数让您能够将应用程序划分成多个功能单元,并按您选择的顺序调用
- 最著名的函数无疑是int main( ),它被编译器视为C++应用程序的起点,必须返回一个int(即整数)
// 声明、定义和调用函数
#include
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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
2.5 使用std::cin 和std::cout 执行基本输入输出操作
- 要将简单的文本数据写入到控制台,可使用std::cout;要从控制台读取文本和数字,可使用std::cin
// cin 的用法
std::cin >> Variable; // 提取运算符>>(从输入流中提取数据)
- 1
- 2
Q&A
-
#include 的作用是什么?
- 这是一个预处理器编译指令。预处理器在您调用编译器时运行。该指令使得预处理器将include后面的<>中的文件读入程序,其效果如同将这个文件输入到源代码中的这个位置。
-
什么情况下需要命令行参数?
- 需要提供让用户能够修改程序行为的选项时。例如,Linux命令ls和Windows命令dir都显示当前目录(文件夹)的内容,要查看另一个目录中的文件,需要使用命令行参数指定相应的路径,如ls /或dir \。
错误信息 APIStatusError: Error code: 402 - {‘error’: {‘message’: ‘Insufficient Balance’, ‘type’: ‘unknown_error’, ‘param’: None, ‘code’: ‘invalid_request_error’}} 表明请求失败的原因是账户余额不足(Insufficient Balance)。
这意味着你的DeepSeek账户中没有足够的资金来支付此次API请求的服务费用。这种情况通常发生在使用付费API服务时,API提供商会对每次请求或一定量的请求收取费用。
解决方案
充值账户:
登录到DeepSeek的官方网站或管理后台,查看账户余额,并进行充值操作。确保账户中有足够的资金来支持API请求。
检查API套餐:
确认你当前使用的API套餐是否适合你的使用场景。有时候免费套餐可能有次数限制或者功能限制,需要升级到付费套餐。
联系客服:
如果不确定如何解决余额问题,可以联系DeepSeek的客服支持,询问具体的解决方案。
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
评论记录:
回复评论: