第一章 开始

熟悉编译器

g++

  • 编译:g++ --std=c++11 ch01.cpp -o main
  • 运行:./prog1
  • 查看运行状态:echo $?
  • 编译多个文件:g++ ch2.cpp Sales_item.cc -o main

输入 g++ --help,查看编译器选项:

  1. Usage: g++ [options] file...
  2. Options:
  3. -pass-exit-codes Exit with highest error code from a phase
  4. --help Display this information
  5. --target-help Display target specific command line options
  6. --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]
  7. Display specific types of command line options
  8. (Use '-v --help' to display command line options of sub-processes)
  9. --version Display compiler version information
  10. -dumpspecs Display all of the built in spec strings
  11. -dumpversion Display the version of the compiler
  12. -dumpmachine Display the compiler's target processor
  13. -print-search-dirs Display the directories in the compiler's search path
  14. -print-libgcc-file-name Display the name of the compiler's companion library
  15. -print-file-name=<lib> Display the full path to library <lib>
  16. -print-prog-name=<prog> Display the full path to compiler component <prog>
  17. -print-multiarch Display the target's normalized GNU triplet, used as
  18. a component in the library path
  19. -print-multi-directory Display the root directory for versions of libgcc
  20. -print-multi-lib Display the mapping between command line options and
  21. multiple library search directories
  22. -print-multi-os-directory Display the relative path to OS libraries
  23. -print-sysroot Display the target libraries directory
  24. -print-sysroot-headers-suffix Display the sysroot suffix used to find headers
  25. -Wa,<options> Pass comma-separated <options> on to the assembler
  26. -Wp,<options> Pass comma-separated <options> on to the preprocessor
  27. -Wl,<options> Pass comma-separated <options> on to the linker
  28. -Xassembler <arg> Pass <arg> on to the assembler
  29. -Xpreprocessor <arg> Pass <arg> on to the preprocessor
  30. -Xlinker <arg> Pass <arg> on to the linker
  31. -save-temps Do not delete intermediate files
  32. -save-temps=<arg> Do not delete intermediate files
  33. -no-canonical-prefixes Do not canonicalize paths when building relative
  34. prefixes to other gcc components
  35. -pipe Use pipes rather than intermediate files
  36. -time Time the execution of each subprocess
  37. -specs=<file> Override built-in specs with the contents of <file>
  38. -std=<standard> Assume that the input sources are for <standard>
  39. --sysroot=<directory> Use <directory> as the root directory for headers
  40. and libraries
  41. -B <directory> Add <directory> to the compiler's search paths
  42. -v Display the programs invoked by the compiler
  43. -### Like -v but options quoted and commands not executed
  44. -E Preprocess only; do not compile, assemble or link
  45. -S Compile only; do not assemble or link
  46. -c Compile and assemble, but do not link
  47. -o <file> Place the output into <file>
  48. -pie Create a position independent executable
  49. -shared Create a shared library
  50. -x <language> Specify the language of the following input files
  51. Permissible languages include: c c++ assembler none
  52. 'none' means revert to the default behavior of
  53. guessing the language based on the file's extension

输入 g++ -v --help可以看到更完整的指令。
例如还有些常用的:

  1. -h FILENAME, -soname FILENAME: Set internal name of shared library
  2. -I PROGRAM, --dynamic-linker PROGRAM: Set PROGRAM as the dynamic linker to use
  3. -l LIBNAME, --library LIBNAME: Search for library LIBNAME
  4. -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文件。

避免多次包含同一头文件

  1. #ifndef SALESITEM_H
  2. #define SALESITEM_H
  3. // Definition of Sales_itemclass and related functions goes here
  4. #endif

成员函数(类方法):使用.调用。

命名空间(namespace):使用作用域运算符::调用。

注释

  • 单行注释: //
  • 多行注释: /**/。编译器将/**/之间的内容都作为注释内容忽略。注意不能嵌套。
  1. #define SALESITEM_H
  2. /*
  3. * 多行注释格式
  4. * 每一行加一个*
  5. */

while语句

循环执行,(直到条件(condition)为假。

for语句

循环头由三部分组成:

  • 一个初始化语句(init-statement)
  • 一个循环条件(condition)
  • 一个表达式(expression)

使用文件重定向

./main <infile >outfile