关于C语言中存储类别、链接的总结
2018-03-16 17:47
183 查看
作用域
作用域描述程序中可访问标识符的区域,一个C变量的作用域有块作用域、函数作用域、函数原型作用域或文件作用域。m定义在块中,具有块作用域,n为函数形参,具有函数原型作用域,范围从形参定义处到原型声明结束。这意味着编译器在处理函数原型中的形参时只关心他的类型,而形参名通常无关紧要。变量定义在函数外面(units)具有文件作用域,从他的定义处到定义所在的文件末尾均可见。int block(int n) { int m; …… }
int units=0; int main() { }
链接
C变量有三种链接属性:外部链接,内部链接或无链接具有块作用域、函数原型作用域、函数作用域的变量都是无链接变量,这些变量只属于定义他们的块,函数或原型私有。具有文件作用域的变量可以是外部链接或内部链接,外部链接变量可以在多文件程序中使用,内部链接变量只能在一个翻译单元中使用。外部链接的文件作用域一般简称为“全局作用域”int a=0; static int b=0; int main() { …… }b使用了static标识符,即为内部链接,a为外部链接
存储期
C对象有四种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。文件作用域变量具有静态存储期,在程序执行期间一直存在。线程存储期用于并发程序设计,从被声明到线程结束一直存在。块作用域具有自动存储期,进入块分配内存,退出块时释放内存,变长数组稍有不同,存储期从声明处开始,而不是从块开始处但是若在块中使用static int a形式,此变量将成为静态存储期,但是依然属于块作用域(即只有在块中才能使用a访问该对象),但是该函数可以给其他函数提供该存储区的地址以便间接访问该对象,例如通过指针形参或返回值静态变量和外部变量在程序被载入内存时已执行完毕外部链接的静态变量如果一个源代码文件使用的外部变量定义在另一个源代码文件中,必须用extern声明,但不要用extern定义一个变量存储类别说明符auto说明符表明变量为自动存储期(当变量同名时表明意图)register说明符把变量归为寄存器存储类别,并且保护地址不被访问(只适用于块作用域)static说明符表明变量具有静态存储期extern说明符表明声明的变量定义在别处好的程序可以不需要使用文件作用域变量!!!!!函数也有存储类别,当希望一个函数只在该文件中使用,用static声明。当使用全局变量且不希望被修改时,记得用CONST分配内存double *ptd;
ptd=(double*)malloc(30*sizeof(double)); free(ptd);malloc()返回动态分配内存的首字节地址,可以像使用数组名一样使用ptd,分配失败将返回空指针存储类别和动态内存分配程序把他可用的内存分为三部分,一部分供静态变量使用,一部分供自动变量使用,一部分供动态内存使用。自动变量的内存通常作为栈来处理,动态内存通常比栈内存慢。
限定符
restrict
只能用于指针,表明该指针是访问数据对象的唯一且初始的方式。volatile代理可以改变该变量的值,通常被用于硬件地址以及在其他程序或同时运行的线程中共享数据。_Atomic当一个线程对一个原子类型的对象执行原子操作时,其他线程不能访问该对象相关文章推荐
- c语言中关于变量存储类别的心得
- C语言编译过程总结详解 - 链接方式
- 关于计算机中小端法和大端法存储的一点总结
- C语言变量的存储类别
- 关于C语言中return的一些总结
- 【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- 嵌入式 Linux C语言(八)——存储类型、作用域、生命周期、链接属性
- C语言中局部变量和全局变量 变量的存储类别
- 关于链接的总结
- 关于C语言多文件编写的一点小小总结
- 关于C语言中static,const,volatile与typedef的一些总结
- C语言杂谈(三)存储类别
- 存储类别、链接和内存管理
- 关于C语言标准的一些总结
- 关于C语言变量生存周期、作用域、内存分布、默认值的基本总结
- C语言系列-存储类别与存储分配
- 作用域、链接属性和存储类型的总结
- C语言的存储类别
- 关于HTML中链接使用的总结
- c语言 总结操作符使用 理解二进制存储