目录
1.预编译
问题1:什么是预编译?
预编译又称预处理,是整个编译过程最先做的工作,即程序执行前的一些预处理工作。
主要处理#开头的指令。如拷贝#include包含的文件代码、替换#define定义的宏、条件编译#if等。
问题2:何时需要预编译?
总是使用不经常改动的大型代码体。
程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。
在这种情况下,可以将所有包含文件预编译为一个预编译头。
2.关键字:static,const,volatile
Static的用途:
一是用于修饰存储类型使之成为静态存储类型;
二是用于修饰链接属性使之成为内部链接属性。
静态存储类型
在函数内定义的静态局部变量,该变量存在内存的静态区,所以即使该函数运行结束,静态变量的值不会被销毁,函数下次运行时能仍用到这个值。
在函数外定义的静态变量——静态全局变量,该变量的作用域只能在定义该变量的文件中,不能被其他文件通过extern引用。
内部链接属性
静态函数只能在声明它的源文件中使用。
Const的用途:
声明常变量,使得指定的变量不能被修改;
例如:
const int a = 5;/*a的值一直为5,不能被改变*/
const int b; b = 10;/*b的值被赋值为10后,不能被改变*/
const int *ptr; /*ptr为指向整型常量的指针,ptr的值可以修改,但不能修改其所指向的值*/
int *const ptr;/*ptr为指向整型的常量指针,ptr的值不能修改,但可以修改其所指向的值*/
const int *const ptr;/*ptr为指向整型常量的常量指针,ptr及其指向的值都不能修改*/
修饰函数形参,使得形参在函数内不能被修改,表示输入参数;
例如:
int fun(const int a);或int fun(const char *str);
修饰函数返回值,使得函数的返回值不能被修改。
例如:
const char *getstr(void);使用:const *str= getstr();
const int getint(void); 使用:const int a =getint();
Volatile的用途:
可能被系统、硬件、进程/线程改变,强制编译器每次从内存中取得该变量的值,
而不是从被优化后的寄存器中读取。
例如:硬件时钟;多线程中被多个任务共享的变量等。