2011.8.7
头文件通过inclue预处理器(通常捆绑在编译器中)指示符 而成为我们程序的一部分
#include指示符读入指定文件的内容,有两种格式:
#include<some_file.h>: 表明这个文件是一个工程文件或标准头文件,查找过程会检查预定义的目录
#include"some_file.h": 表明该文件是用户提供的头文件,查找该文件时从当前目录开始
#ifndef #endif 检查预编译器常量在前面是否已经被定义
#ifdef #endif 指示符判断一个预处理器常量是否已定义, 以便有条件地包含程序代码
编译c++程序时,编译器自动定义了一个预处理器名字__cplusplus c是__STDC__
比较有同的预定义名字:__LINE__, __FILE__, __TIME__. __DATE__
assert()是C语言标准库中提供的一个通用宏处理器宏
#include<assert.h>
#include<cassert>
using namespace std;
库文件厂商用名字空间来控制全局名字空间污染(即名字冲突)问题 ,以避免他们的库污染了用户程序的名字空间
输入/输出流(iostream )库:cin cout cerr
文件输入/输出 (fstream )库
C++内置数据类型 :int float double boolean char
标准库 : 字符串、复数、vector
在内置数据类型与标准库类的类型之间是复合类型 ,特别是指针和数组
静态内存分配 :在程序执行之前进行的
静态对象是有名字的变量,直接对其操作;动态对象是没有名字的对象,通过指针间接操作
静态对象的分配与释放由编译器自动处理。
int eval = 11;
int *p = &eval;
eval = eval + 1;
*p = *p + 1;
源文件和头文件
源文件被直接编译,也就是说源文件将直接被编译为obj文件。而头文件如果没有被任何源文件包含的话,将不会被编译。
现在很多编译器支持头文件的预编译,以提高编译效率(尤其是对于STL头文件,一堆函数在里面)
gcc编译源码四个步骤:
1:预处理 :把包含的头文件编译进来
2:编译 :检查语法错误,确定代码要做的工作
3:汇编 :把编译阶段输出的.s文件转换成二进制目标代码
4:链接 :把汇编阶段生成的.o文件链接成可执行文件
静态变量 只在第一次进入函数的时候初始化,而全局变量 是进入程序的时候就初始化了,另外,全局变量是对整个程序可见的,静态变量只在函数内可见。(如果是类的静态变量的话,倒是可以用类名加变量名访问,但是可以private,而全局变量不能设置权限 )