1、操作系统通过调用main函数来执行程序,(嵌入启动函数,操作系统调用启动函数。在启动函数中进行C/C++运行时库的初始化等工作,最后调用main函数执行程序。参考资料:C运行时库),main函数则执行组成自己的语句并返回一个值给操作系统。

操作系统通过main函数返回的值来确定程序是否成功执行完毕。返回0值表示程序成功执行完毕。返回值的作用:如在一个程序(A)中调用另一个程序(B)处理任务,程序A通过程序B的返回值判断任务执行情况,并及时处理。参考资料:main函数返回值作用

main函数是(唯一)被操作系统显式调用的函数。

2、定义函数必须指定4个元素:返回类型、函数名、圆括号内的形参表(可能为空)和函数体。

main函数的返回值必须是int型。这是标准规定。参考资料:C语言之main函数返回值问题分析

3、在大多数系统中,main函数的返回值是一个状态指示器。返回值0往往表示main函数成功执行完毕。任何其他非零的返回值都有操作系统定义的含义。通常非零返回值表明有错误出现。每一种操作系统都有自己的方式告诉用户main函数返回什么内容。

访问main函数的返回值的方式和系统有关。不论UNIX还是Windows系统,执行程序后,必须发出一个适当的echo命令。UNIX系统中,通过键入如下命令获取状态:

$ echo $?

要在Windows系统下查看状态,键入

C:\directory> echo %ERRORLEVEL%(显示程序main函数的返回值)

4、调用GNU编译器的默认命令是g++:

$ g++ prog1.cc -o prog1

这里的$是系统提示符。这个命令产生一个名为prog1或prog1.exe的可执行文件。在UNIX系统下,可执行文件没有后缀;-o prog1是编译器参数以及用来存放可执行文件的文件名。如果省略-o prog1,那么编译器在UNIX系统下产生名为a.out而在Windows下产生名为a.exe的可执行文件。

微软编译器采用命令cl(compile-link 编译-链接)来调用:

C:\directory> cl -GX prog1.cpp

cl是调用编译器的命令,-GX是一个选项,该选项在使用命令行界面编译程序时是必需的。

5、流是指要从某种IO设备上读入或写出的字符序列。属于“流”试图说明字符是随着时间顺序生成或消耗的。(流就是一种序列。)

6、标准库定义了4个IO对象:istream的cin、ostream的cout、cerr、clog。

一般情况下,系统将这些对象与执行程序的窗口联系起来。这样,当我们从cin读入时,数据从执行程序的窗口读入,当写到cout、cerr或clog时,输出写至同一窗口。

7、当操作符是输出操作符(<<)时,结果是左操作数的值。也就是说,输出操作返回的值是输出流本身。

endl是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。

8、在写C++程序时,大部分出现空格符的地方可用换行符代替。这条规则的一个例外是字符串字面值中的空格符不能用换行符替代。另一个例外是空格符不允许出现在预处理指示中。

9、定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖这个初值。如果不能保证读取变量之前重置变量,就应该初始化变量。

10、当注释跨多行时,最好能直观地指明每一行都是注释。我们的风格是在注释的每一行以星号开始,指明整个范围是多行注释的一部分。如:

//
//
//
/*
 *
 */

太多注释混入程序代码可能会使代码难以理解,通常最好是将一个注释块放在所解释代码的上方。

临时忽略一段代码更好的方法,是用编辑器在要忽略的每一行代码前面插入单行注释。

11、for(int val = 1; val <= 10; ++val)退出for循环后,变量val不可再访问,循环终止后使用val是不可能的。然后不是所有的编译器都有这一要求。

12、while(std::cin >> value)当我们使用istream对象作为条件,结果是测试流的状态。如果流是有效的(也就是说,如果读入下一个输入是可能的)那么测试成功。遇到文件结束符或遇到无效输入时,如读取了一个不是整数的值,则istream对象是无效的。处于无效状态的istream对象将导致条件失败。

13、操作系统使用不同的值作为文件结束符。Windows系统下我们通过键入control-z,来输入文件结束符。Unix系统中,包括Mac OS-X机器,通常用control-d。

14、标准库的头文件用尖括号<>括起来,非标准库的头文件用双括号""括起来。

15、点操作符通过它的左操作数取得右操作数。点操作符仅应用于类类型的对象:左操作数必须是类类型的对象,右操作数必须指定该类型的成员。与大多数其他操作符不同,点操作符的右操作数不是对象或值,而是成员的名字。

16、缓冲区 一段用来存放数据的存储区域。IO设备通常存储输入(或输出)到缓冲区,并独立于程序动作对缓冲区进行读写。输出缓冲区通常必须显式刷新以强制输出缓冲区内容。默认情况下,读cin会刷新cout;当程序正常结束时,cout也被刷新。

cerr 默认情况下,输出cerr不带缓冲。

clog 默认情况下,写到clog时是带缓冲的。

操纵符 在读或写时“操纵”流本身的对象,如std::endl。

未初始化变量 类类型没有未初始化变量。没有指定初始值的类类型变量由类定义(即构造函数)初始化。