doc/docs/Cpp-Primer/1.开始.md
sairate c34823a3bd docs(book): 添加现代 C++教程及相关代码
- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本
- 添加 C++ Primer 练习代码
- 新增 Learn C++ 教程的 C++ 开发简介章节
- 添加头文件解析文档
- 更新 mkdocs.yml,包含新教程的目录结构
- 修改项目设置,使用 Python 3.10环境
2025-07-06 14:46:58 +08:00

150 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sort: 1
---
# 开始
## 编写简单的C++程序
一个函数的定义包含四部分:返回类型、函数名、一个括号包围的形参列表(允许为空)以及函数体。
## 熟悉编译器
**g++**
- 编译:`g++ 1.1.cpp -o main`
- 运行:`./main`
- 查看运行状态:`echo $?`
- 编译多个文件:`g++ ch2.cpp Sales_item.cc -o main`
输入 `g++ --help`,查看编译器选项:
```
Usage: g++ [options] file...
Options:
-pass-exit-codes Exit with highest error code from a phase
--help Display this information
--target-help Display target specific command line options
--help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]
Display specific types of command line options
(Use '-v --help' to display command line options of sub-processes)
--version Display compiler version information
-dumpspecs Display all of the built in spec strings
-dumpversion Display the version of the compiler
-dumpmachine Display the compiler's target processor
-print-search-dirs Display the directories in the compiler's search path
-print-libgcc-file-name Display the name of the compiler's companion library
-print-file-name=<lib> Display the full path to library <lib>
-print-prog-name=<prog> Display the full path to compiler component <prog>
-print-multiarch Display the target's normalized GNU triplet, used as
a component in the library path
-print-multi-directory Display the root directory for versions of libgcc
-print-multi-lib Display the mapping between command line options and
multiple library search directories
-print-multi-os-directory Display the relative path to OS libraries
-print-sysroot Display the target libraries directory
-print-sysroot-headers-suffix Display the sysroot suffix used to find headers
-Wa,<options> Pass comma-separated <options> on to the assembler
-Wp,<options> Pass comma-separated <options> on to the preprocessor
-Wl,<options> Pass comma-separated <options> on to the linker
-Xassembler <arg> Pass <arg> on to the assembler
-Xpreprocessor <arg> Pass <arg> on to the preprocessor
-Xlinker <arg> Pass <arg> on to the linker
-save-temps Do not delete intermediate files
-save-temps=<arg> Do not delete intermediate files
-no-canonical-prefixes Do not canonicalize paths when building relative
prefixes to other gcc components
-pipe Use pipes rather than intermediate files
-time Time the execution of each subprocess
-specs=<file> Override built-in specs with the contents of <file>
-std=<standard> Assume that the input sources are for <standard>
--sysroot=<directory> Use <directory> as the root directory for headers
and libraries
-B <directory> Add <directory> to the compiler's search paths
-v Display the programs invoked by the compiler
-### Like -v but options quoted and commands not executed
-E Preprocess only; do not compile, assemble or link
-S Compile only; do not assemble or link
-c Compile and assemble, but do not link
-o <file> Place the output into <file>
-pie Create a position independent executable
-shared Create a shared library
-x <language> Specify the language of the following input files
Permissible languages include: c c++ assembler none
'none' means revert to the default behavior of
guessing the language based on the file's extension
```
输入 `g++ -v --help`可以看到更完整的指令。
例如还有些常用的:
```
-h FILENAME, -soname FILENAME: Set internal name of shared library
-I PROGRAM, --dynamic-linker PROGRAM: Set PROGRAM as the dynamic linker to use
-l LIBNAME, --library LIBNAME: Search for library LIBNAME
-L DIRECTORY, --library-path DIRECTORY: Add DIRECTORY to library search path
```
**获得程序状态**:
- windows: ``echo %ERRORLEVEL%``
- UNIX: ``echo $?``
## IO
- ```#include <iostream>```
- ```std::cout << "hello"```
- ```std::cin >> v1```
记住`>>``<<`返回的结果都是左操作数,也就是输入流和输出流本身。
**endl**:这是一个被称为**操纵符**manipulator的特殊值效果是结束当前行并将设备关联的缓冲区buffer中的内容刷到设备中。
UNIX和Mac下键盘输入文件结束符`ctrl+d`Windows下`ctrl+z`
**头文件**:类的类型一般存储在头文件中,标准库的头文件使用`<>`,非标准库的头文件使用`""`。申明写在`.h`文件,定义实现写在`.cpp`文件。
**避免多次包含同一头文件**
```cpp
#ifndef SALESITEM_H
#define SALESITEM_H
// Definition of Sales_itemclass and related functions goes here
#endif
```
**成员函数(类方法)**:使用`.`调用。
**命名空间namespace**:使用作用域运算符`::`调用。
## 注释
- 单行注释: `//`
- 多行注释: `/**/`。编译器将`/*``*/`之间的内容都作为注释内容忽略。注意不能嵌套。
```cpp
#define SALESITEM_H
/*
* 多行注释格式
* 每一行加一个*
*/
```
## while语句
循环执行直到条件condition为假。
## for语句
循环头由三部分组成:
- 一个初始化语句init-statement
- 一个循环条件condition
- 一个表达式expression
## 使用文件重定向
``./main <infile >outfile``