C语言的链接属性的个人理解
2015-10-04 22:32
561 查看
C语言有3个链接属性:extern(外部)、intern(内部)、none(无)。
属于extern的标识符无论声明几次,都表示几个源文件中或整个项目中同一个实体。
属于intern的标识符在一个源文件中的多个声明都表示同一个实体。
属于none的标识符有几个声明就有几个实体,相互独立。
全局变量默认拥有external链接属性;
static修饰的变量拥有internal链接属性;
函数体中的变量用于none链接属性。
函数声明时也默认拥有extern链接属性。
已有链接属性的变量再添加任何链接属性都无效(声明的时候就赋予了链接属性?),保持原链接属性,但对缺省情况下是extern链接属性的标识符除外,加上static关键字,会将其从extern变为intern(被其所属源文件私有),函数同样也可以这样:static int a( int b )。声明局部变量后,使用的也不再是拥有extern链接属性的变量,而是这个新声明的变量(拥有extern链接属性的变量仍然可以在局部变量作用域外的其它地方调用,其它.c或.cpp文件调用时只需声明并加上extern即可如:extern
int b; printf( "%d\n",b );)。
注意这里用的定义和之前用的声明,定义变量和声明变量是不同的,定义变量编译器需要给他分配内存单元,而声明变量则不用,所以extern int a,此时的a表示别处的源文件定义过的a。变量或函数可以多次声明,但只能定义一次。
当变量在不同源文件都用到时(也就是需要具有extern链接属性),最好第一次声明就用extern关键字,尽管缺省也表示是extern链接属性,这样有利于代码的可读性。
有一个技巧,在一个.h文件声明多个函数,可以在一个.c或.cpp文件中对它们进行定义,在另一个.c或.cpp文件中对他们进行调用。
属于extern的标识符无论声明几次,都表示几个源文件中或整个项目中同一个实体。
属于intern的标识符在一个源文件中的多个声明都表示同一个实体。
属于none的标识符有几个声明就有几个实体,相互独立。
全局变量默认拥有external链接属性;
static修饰的变量拥有internal链接属性;
函数体中的变量用于none链接属性。
函数声明时也默认拥有extern链接属性。
已有链接属性的变量再添加任何链接属性都无效(声明的时候就赋予了链接属性?),保持原链接属性,但对缺省情况下是extern链接属性的标识符除外,加上static关键字,会将其从extern变为intern(被其所属源文件私有),函数同样也可以这样:static int a( int b )。声明局部变量后,使用的也不再是拥有extern链接属性的变量,而是这个新声明的变量(拥有extern链接属性的变量仍然可以在局部变量作用域外的其它地方调用,其它.c或.cpp文件调用时只需声明并加上extern即可如:extern
int b; printf( "%d\n",b );)。
注意这里用的定义和之前用的声明,定义变量和声明变量是不同的,定义变量编译器需要给他分配内存单元,而声明变量则不用,所以extern int a,此时的a表示别处的源文件定义过的a。变量或函数可以多次声明,但只能定义一次。
当变量在不同源文件都用到时(也就是需要具有extern链接属性),最好第一次声明就用extern关键字,尽管缺省也表示是extern链接属性,这样有利于代码的可读性。
有一个技巧,在一个.h文件声明多个函数,可以在一个.c或.cpp文件中对它们进行定义,在另一个.c或.cpp文件中对他们进行调用。
相关文章推荐
- C++primer学习:string类的练习(2)
- C++primer学习:string的操作习题(1):
- CPPUTest 单元测试框架(针对 C 单元测试的使用说明)
- C++学习笔记6——类的多态
- 【小游戏】C++打造2048控制台版本
- 【小游戏】C++打造2048控制台版本
- C++构造函数以及析构函数的若干面试问题
- 《C++primer(第五版)》学习之路-第十七章:标准库特殊设施
- C#学习日记10----番外篇 C语言进制转换
- C++函数
- [C/C++]函数可变参数表
- 条款5.了解c++默默编写并且调用了哪些函数。
- C语言函数指针变量
- C++缺省参数和函数重载
- C++ assert()的用法
- 什么是EOF ,如何输入EOF
- emacs 24.4.1 终极 C++智能提示解决方案
- C++学习笔记5——类的继承
- 条款1:将c++视作一个语言联邦
- C++基础编程----2.3标准库类型vector