2.1 HelloWorld


//HelloWorld.cpp
#include <iostream>                 //包含头文件
int main()                          //函数头
{
using namespace std;            //编译指令
cout << "Hello World!" << endl; //输出语句
return 0;                       //返回语句
}



//               单行注释,编译器忽略//及后面的内容
#include:        预处理指令
int main():      函数头
using namespace: 编译指令
{}:              函数体由{}括起来
cout:            C++中使用cout操作符进行显示输出
retun            结束函数的执行



注:C++严格区分大小写字母。



2.1.1 main()函数



int main()
{
statements
return 0;
}



上述代码描述了一个名为main()函数的行为,构成了函数定义(function definition)。
函数函数定义有两部分组成:
int main()一行叫作函数头(function heading),{和}中包括的部分叫函数体。


函数头描述了函数与其他函数之间的调用接口。函数描述了函数在工作过程中具体调用的计算机指令。


每一台完整的指令都称为语句,所有的语句都以分号结束。



1.作接口的函数头
函数头描述了和调用者(函数)之间的通信接口。位于函数名前面的部分称为返回值类型,描述了返回给调用者的数据。
函数名后面(括号中)的部分叫形参列表(argument list)或参数列表(parameter list)描述了调用者传递给函数的数据。



注:通常main()函数被启动代码调用,启动代码由编译器添加到程序中,启动代码是程序与操作系统之间的桥梁。main()函数描述程序和操作系统之间的调用接口。



在C语言中省略类型相当于返回int类型,参数列表为空表示函数对是否接受参数保持默认。


在C++中参数列表为空表示函数不接受任何参数。
ANSI/ISO C++标准规定,如果编译到达main()函数末尾时没有碰到返回语句,则认为main()函数以 return 0; 结尾(注:该规定只适用于main()函数)。



2.入口函数
C/C++程序运行时,通常从main()函数开始执行。
存在一些例外情况:Windows下编写DLL动态链接库时,由于DLL不是独立的应用程序,因此不需要main()函数。...



2.1.2 注释
C++注释以双斜线(//)开始,注释是程序员为读者提供的说明,对程序进行解释说明。编译器忽略注释内容。
C++注释以//开始到行尾结束,可单独位于一行,也可独立位于一行。
C++继承了C语言的注释,C语言的注释内容包含在/*和*/之间。C风格注释可跨越多行。C99标准中也添加了//单行注释



2.1.3 C++预处理器和iostream文件
如果程序要使用C++工具输入或输出,需要如下两行代码:
#include <iostream>
using namepsace std;



c/c++编译器在编译源代码之前,自动调用预处理器对源码文件进行预处理,处理以#开头的预处理指令将iostream文件中的内容添加到程序中。


为什么要将iostream文件中的内容添加到程序中?


iostream中的io指的是输入(进入程序中的数据)和输出(从程序中发送出去的数据),C++输入/输出涉及到iostream文件中的多个定义。
为了使用cout输出信息,HelloWorld程序需要iostream文件中的定义。#include将头文件所在的位置替换为iostream文件中的内容,产生一个新的混合文件,供编译器编译。



2.1.4 头文件
由于iostream被包含在HelloWorld.cpp文件,叫做包含文件(include file),因为被包含在其他文件的起始处,也叫头文件(header file).
C语言中以.h作为文件扩展名。C++头文件没有扩展名,将部分C语言头文件转成C++风格(去掉扩展名.h,在文件名前添加c,表示来自C语言).



头文件命名约定
头文件类型		约定				示例		说明
C++旧风格		以.h结尾			iostream.h	C++程序可使用
C旧式风格		以.h结尾			math.h		C/C++可使用
C++新风格		没有扩展名			iostream	C++可使用,使用namespace std
转换后的C		加前缀c,没有扩展名	cmath		C++程序可使用,可以使用不是C的特性,如namespace std




2.1.5 名称空间


编写引用了多个厂商提供的源码的大型项目时,使用名称空间可以有效地避免命名冲突。


一个潜在的问题,Microflp Industries公司和Piscine公司分别提供了名为wanda()的函数,使用wanda()函数时编译器将不知道具体要使用哪个版本,
Microflp Industries公司将wanda()函数定义在Microflp名称空间,此时wanda()函数的完整名称为Microflp::wanda(),则Piscine公司将wanda()函数放到Piscine名称空间中,完整名称为Piscine::wanda()。


这样我们在使用两个厂商的代码时就可以将其区分开。


Microflp::wanda("Hello");
Piscine::wanda("你好");



cout和endl分别被定义在iostream头文件中。也就是说cout的完整名称为std::cout,endl的完整名称为std::endl。



使用名称空间中的组件:



//1.使用名称空间前缀
std::cout << "Helo" << std::end;



//2.使用using编译指令
using namespace std;
cout << "Hello" << endl;



//3.使用using编译指令
using std::cout;
using std::endl;
cout << "Hello" << endl;



2.1.6 使用cout进行输出
在C/C++中使用双引号括起来的一系列字符叫作字符串。
<<表示把字符串发送给cout,<<符号指出了数据流动的路径。


cout是一个预定义的对象,可以显示字符串,数字或字符。


输出是一个流,即从程序流出的一系列字符。


cout对象表示输出流,定义在iostream文件中,cout对象属性包括一个插入运算符(<<),可以将右侧的数据插入到输出流中。



注:通过重载,同一个运算符将有不同的含义,编译器通过上下文来确定运算符的含义。



1.控制符
cout << endl;
endl是一个特殊的C++符号,表示重起一行。在输出流插入endl将导致屏幕光标移到下一行的开头。诸如endl等对cout具有特殊含义的符号称为控制符(manipulator)。



例:
std::cout << "Hello World" << std::endl;




2.换行符
'\n'被视为一个字符,叫作换行符,继承自C语言。



例:
std::cout << "Hello World\n";



endl和'\n'的区别:
endl确保在程序执行到endl时刷新输出(立刻将内容显示到屏幕上),而'\n'不提供这样的保证。



2.1.7 C++源码格式化



1.标记和空白
一行代码中不可分割的元素叫标记(token),通常使用空格、制表符、或回车将两个标记分开。
空格、制表符、回车统称为空白(white space)。有些符号(括号、逗号)不需要空白分隔。



2.C++源代码风格


每条语句占一行。


每个函数的开始花括号和结束花括号分别各占一行。


函数中的语句相对于花括号进行缩进。


与函数名相关的圆括号周围没有空白。 2.2.1 声明语句和变量 若要将数据存储在计算中,必须必须指定数据存储的位置和内存空间,并对该空间命名。 在C++中使用声明语句指出存储类型并提供位置标签。 int carrot; 指出了存储数据所需要的内存及内存单元的名称。 int 类型用于存储整数,即没有小数点的数值,可以是正整数,也可以是负整数。 carrot称为变量,因为其值可以修改。在C++中所有变量在使用前必须声明。 声明变量不分配内存空间,定义变量分配内存空间。 C++变量声明不必在函数的起始位置,推荐在首次使用的位置进行声明。 2.2.2 赋值语句 赋值语句将数值保存到内存空间中,如int carrot = 25;表示将数值25,保存到carrot变量中。 = 叫作赋值运算符。C/C++可以连续使用赋值运算符。 int a; int b; int c; a = b = c = 100; 赋值操作从右向左进行。 carrots = carrots - 1;表明或以对变量的值进行修改。 赋值运算符的右面carrots - 1是一个算术表达式,计算机将carrots中的25减掉1得到24,赋值运算符将24重新保存到carrots变量中。 2.2.3 cout新花样 cout << carrots;将存储在carrots中的整数值,即25。 cout可以用于打印字符串,也可用于打印整数。这一特性源于C++面向对象特性。 C++插入运算符(<<)根据后面的数据类型调整所调用的函数。 //未完待续.....