C语言
static、statac inline、extern inline 定义与用法
一 定义inline(内联函数)
1.引入内联函数的目的是为了解决程序中函数调用的效率问题。
2.内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,因此一般比较小的函数才使用内联函数。
3.有两种内联函数的声明方法,一种是在函数前使用inline关见字,另一种是在类的内部定义函数的代码,这样的函数将自动转换为内联函数,而且没必要将inline放在函数前面。
二 用法
1 static 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。换句话说,就算你其它文件里包含了同名同参数表的函数定义的话,也是不会引起函数重复定义的错误的.因为static是仅在当前文件可见。
2 static inline 可以把它认为是一个static的函数,加上了inline的属性,能且之内在当前文件内进行内联展开。static inline函数和static函数一样,其定义的范围是local的,即可以在程序内有多个不同的定义(只要不位于同一个文件内即可)。
而不加static的话,会使该函数被其他文件调用。
3 extern inline 表示该函数是已声明过的了,提示编译器遇到此变量或函数时,在其它模块中寻找其定义。在找到后将代码内联展开。
.h文件 .c文件
.h文件是头文件,内含函数声明、宏定义、结构体定义等内容。
.c文件是程序文件,内含函数实现,变量定义等内容。
malloc realloc calloc
三个函数的申明分别是:
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t numElements, size_t sizeOfElement);
都在stdlib.h函数库内
它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL
malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
char* p;
p=(char*)malloc(20);
calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:
char* p;
p=(char*)calloc(20,sizeof(char));
realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度
如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);