- 新增现代 C++ 教程的 Preface 章节,包括英文和中文版本 - 添加 C++ Primer 练习代码 - 新增 Learn C++ 教程的 C++ 开发简介章节 - 添加头文件解析文档 - 更新 mkdocs.yml,包含新教程的目录结构 - 修改项目设置,使用 Python 3.10环境
150 lines
5.8 KiB
Markdown
150 lines
5.8 KiB
Markdown
---
|
||
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``
|
||
|
||
|
||
|