头文件:变量的声明,函数的声明,类的定义——单独的头文件不参与编译,生成
源文件:变量的定义,函数的定义,类的成员的定义(包括属性和方法),在编译时针对源文 件,自上而下,多个源文件独立编程
变量的声明:注意——int a//定义未初始化; int a=0//定义初始化;
只有在顶以前加上extern才叫声明;
源文件中类成员的定义:
源文件中:类成员函数在类外定义时要加上类名作用域
源文件中:类成员中的静态成员的static要去掉
#pragma once一般c++编译器自动添加其作用为:告诉编译器这个头文件在别包含在其他源文件中时,只包含一次——直接与编译器沟通,编译程序效率高
与#pragma once一样有去重功能还可以用宏实现eg:#ifndef 宏
#define 宏
去重代码
#endif
宏——编译效率低,宏的名字可能重复导致程序编译出错
程序的生成过程:
1>>预处理文件——将编译的.cpp文件生成预处理文件.i文件
(1)解析#include头文件,进行展开替换
(2)宏的定义指令——#define宏的替换,#undef等
(3)预处理指令——解析#if #ifndef #ifdef #else #elif #endif等
(4)删除所有注释
2>>编译
将预处理完的.i文件进行词法分析,语法分析,语义分析及优化,产生相应的汇编文件.asm文件
3>>汇编
将编译完的.asm汇编文件的汇编指令逐条翻译成目标机器指令,并生成可重定位的目标程序.obj文件,该文件时二进制文件,编码时机器指令
4>>连接
将多个目标文件.obj和库文件用连接器连接在一起,生成完整的可执行文件
编译期 :将源代码文件交给编译器进行编译生成,最终得到可执行文件的过程;
类的成员函数,静态属性,访问修饰符,作用域都是编译期的
运行期:将可执行文件交给操作系统,运行,知道程序结束,退出的过程;
类的实例,对象,对象的引用,指针类型的对象都是运行期的概念
宏:
1.宏主要起替换作用,在预处理期替换,宏也可以替换多行 “\” 该符号可以连接当行和下一行,一般情况下最后一行不用 "\"————‘\’后不能有任何的空格,tab,注释。
2.宏也可以带参数eg #define MAX(a,b) a*b //带参数的宏,宏中的参数不会自动计算只是在替换如上面,若传参为MAX(1+2,3)那么结果不为9而是7——宏相对于函数的好处为效率高速度快——但无法进行程序的调试
3. #相当于将宏的参数看成字符串,相当于加上了“”
#define String(ART) #ART
#@相当于将宏的参数看成字符,相当于加上了‘’
#define String(ART) #@ART
##相当于将宏的参数与指定的内容进行拼接
#define String(ART) int a##ART=0
4.#undef取消宏的定义,限制宏的作用范围