1. 对于局部变量: 局部变量使用 static 修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为 0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变,下一次调用该函数时,静态局部变量保持上一次的值。 2. 对全局变量:仅对当前文件可见,其他文件不可访问,其他文件可以定义同名变量而不冲突。 用法:不需要与其他文件共享时,能够降低模块之间的耦合,避免冲突和误用 3. 对函数:只能在声明他的文件中可见,其他文件不能引用。
对应短小精悍且被频繁调用的函数,加上inline关键字会在编译时在函数调用位置替换为函数的代码块,节省函数调用的时间和对栈内存重复开辟带来的消耗,代价上增加了程序文件的大小。
1. 展开的时机:inline函数在编译时展开,#define在预处理时展开 2. 参数的类型检查: inline函数还是一个函数,会进行参数类型检查,而#define不会,只是做简单的字符串替换 3. 是否允许复杂语句:inline函数不允许出现复杂语句,例如递归,大型循环等;#define不作要求 4. 是否一定展开:inline函数不一定展开,由编译器决定;#define一定展开
const用来修饰一个变量,表示其在初始化之后不能改变变量的值,该变量拥有一般变量的基本属性,有类型、占用空间。 一般用法:用于在函数传参时修饰,避免函数内改变指针指向的内容或者指针指向的地址 void StringCopy(char*strDestination,const char*strSource);//指针指向的内容 void swap ( int* const p1 , int* const p2 );//指针指向的地址