最近用到C++的时候意识到自己很多知识都掌握的不牢固,C11的特性也基本都不了解,心想这样不行就决定来看这本厚厚的书了。这系列主要是记录一些以前平时不太注意或是不懂的东西,有的是直接来自于书上有的是配合网上的资料搜索得到。
这些都只是我的笔记而已,不严谨也不会有什么编排和条例。如果有人有空看了这些笔记,又发现了错误希望可以在评论中指出,感激不尽。
1.1
- main函数是C++程序与操作系统交流的接口,操作系统通过调用main函数来执行C++程序。
- main函数的返回值约定上是指示程序运行状态用的,返回0的时候系统会认为程序运行正常,其他数值会认为程序出错。
- 由上一点,当在例如linux的命令行中使用&符连续运行多个程序时,只要前面的程序返回值非0就会停止指令的执行
- 在平时命令行中想要知道返回值可以使用echo命令
- C++的文件后缀名与编译器的约定有关,最常见的后缀名是.cpp,但是在linux/unix下.cc和.C也是一种常用后缀名,.C是最原始的C++文件后缀名。
- 相类似的,.h也不是唯一的头文件后缀名,.H,.hh,.hpp都是可能的后缀名。这些名称实际上都是为了和C语言的后缀名做出区分。
1.2
- 标准库有四个IO对象cin,cout,cerr,clog,默认情况下数据都经过程序的运行窗口读写,但是我们也可以通过文件重定向来修改其方向。
- 很多时候手动输入参数是很麻烦的,我们可以在运行程序时增加命令行参数" <infile >outfile"来重定向输入输出流,这样就可以直接利用文件中写好的参数进行自动调试。
- 在非命令行界面例如VS等IDE自动启动的程序中,以VS为例,可以在项目-属性-调试-命令参数 中改变所需的参数。
- 还有一种方法是在main函数开始的时候调用函数改变输入输出流,要注意此方法改变后没有办法在同程序中改回。
- 上面的freopen是包含在stdio.h里的,需要include后才能使用。参数从前往后分别是<文件名>, <读写模式(同fopen)>,<流文件>
1.3
- 使用/**/来进行多行注释时要注意不能多个注释符嵌套
- //注释符会忽略注释符后面当行的所有内容
- 综合来说//注释符会更加实用
1.4- 使用IO流时,IO流对象本身也是有返回值的,例如istream在遇到文件结束符(EOF)时会返回一个无效对象,也就是会使得条件判断为false。运用好这点可以简化循环的编写。
- 标准库中的endl操纵符的具体效果除了换行,还会将缓冲区中的所有数据刷到设备中,可以保证当前的输出不会只停留在内存中等待。
- 在Windows中,文件结束符通过在cmd界面按Ctrl+Z和回车键触发,在UNIX系统(包括MacOS)中,使用Ctrl+D触发。
- Debug时按照编译器提示从前往后修复错误,并且每调试好一个错误立即运行一次是个好习惯,因为很多错误是连锁反应造成的。
- 标准库头文件是没有后缀名的,include时用<>来括住。
- 表明函数的小括号()学名叫调用运算符。