--- 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= Display the full path to library -print-prog-name= Display the full path to compiler component -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, Pass comma-separated on to the assembler -Wp, Pass comma-separated on to the preprocessor -Wl, Pass comma-separated on to the linker -Xassembler Pass on to the assembler -Xpreprocessor Pass on to the preprocessor -Xlinker Pass on to the linker -save-temps Do not delete intermediate files -save-temps= 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= Override built-in specs with the contents of -std= Assume that the input sources are for --sysroot= Use as the root directory for headers and libraries -B Add 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 Place the output into -pie Create a position independent executable -shared Create a shared library -x 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 ``` - ```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 outfile``