C语言external-internal-none链接属性浅析
2017-02-10 15:31
369 查看
很多C语言初学者对C语言的链接属性不是很清楚,通过自己的学习将C语言的链接属性浅析总结如下:
GNU-gcc
㈠. external和internal以及none链接属性的讲解
备注:1.链接属性分为external,internal,none。
2.全局变量默认拥有external链接属性;
static修饰的变量拥有internal链接属性;
函数体中的变量用于none链接属性。
3.拥有external链接属性的变量可被所有文件访问,只需要声明下即可(extern int b;)
拥有internal属性的变量只能在其定义的文件中被访问(static int sta_c;)
拥有none属性的变量只能在其定义开始处到代码块作用域结束处被访问。
4.给已经定义的变量添加任何链接属性声明(如:extern或static)都是无效的,变量原链接属性保持不变。
用代码说明:
///////////////////////myfun.c文件///////////////////////////////
int b = 123; ①
int out_c = 315;
static double PI= 3.14159; //myfun.c文件以外的文件是不能访问PI变量的
int Add(const int first, const int second)
{
return first + second;
}
//End myfun.c file
/////////////////////////test.c 文件///////////////////////////////////////
#include ..
int b;② //等价于extern int b;即定义在myfun.c中的变量b
//最好写成extern int b;易于理解,这种简写模式只适用于全局作用域
//对于函数作用域是不能简写的,否则成了定义函数的局部变量。
int main(void)
{
extern int b;③ //external(外部链接)属性的b,其作用域起于此声明处止于语句④之前
printf("%d\n",b); //输出:123
//函数的局部变量,链接属性为none;④处的变量b会屏蔽掉③处的变量b,
int b = 456; ④
//④处变量b的作用域起于其定义处,止于函数结束
printf("%d",b); //输出: 456
extern int b;⑤
//编译器将extern int b解析成:在已经定义的int b = 456 (④)基础
//上加了一个extern属性。C规定:在已经定义变量上加任何链接属性都不
//会改变变量的原链接属性。给b上加extern属性并不会使none链接属性变
//成extern链接属性。
printf("%d",b); //所以输出: 456
extern int out_c;//绝对不能简写成int out_c;否则是定义函数作用域的变量
printf("%d",out_c); //输出:315
return 0;
}
工具/原料
GNU-gcc
方法/步骤
㈠. external和internal以及none链接属性的讲解备注:1.链接属性分为external,internal,none。
2.全局变量默认拥有external链接属性;
static修饰的变量拥有internal链接属性;
函数体中的变量用于none链接属性。
3.拥有external链接属性的变量可被所有文件访问,只需要声明下即可(extern int b;)
拥有internal属性的变量只能在其定义的文件中被访问(static int sta_c;)
拥有none属性的变量只能在其定义开始处到代码块作用域结束处被访问。
4.给已经定义的变量添加任何链接属性声明(如:extern或static)都是无效的,变量原链接属性保持不变。
用代码说明:
///////////////////////myfun.c文件///////////////////////////////
int b = 123; ①
int out_c = 315;
static double PI= 3.14159; //myfun.c文件以外的文件是不能访问PI变量的
int Add(const int first, const int second)
{
return first + second;
}
//End myfun.c file
/////////////////////////test.c 文件///////////////////////////////////////
#include ..
int b;② //等价于extern int b;即定义在myfun.c中的变量b
//最好写成extern int b;易于理解,这种简写模式只适用于全局作用域
//对于函数作用域是不能简写的,否则成了定义函数的局部变量。
int main(void)
{
extern int b;③ //external(外部链接)属性的b,其作用域起于此声明处止于语句④之前
printf("%d\n",b); //输出:123
//函数的局部变量,链接属性为none;④处的变量b会屏蔽掉③处的变量b,
int b = 456; ④
//④处变量b的作用域起于其定义处,止于函数结束
printf("%d",b); //输出: 456
extern int b;⑤
//编译器将extern int b解析成:在已经定义的int b = 456 (④)基础
//上加了一个extern属性。C规定:在已经定义变量上加任何链接属性都不
//会改变变量的原链接属性。给b上加extern属性并不会使none链接属性变
//成extern链接属性。
printf("%d",b); //所以输出: 456
extern int out_c;//绝对不能简写成int out_c;否则是定义函数作用域的变量
printf("%d",out_c); //输出:315
return 0;
}
相关文章推荐
- C语言 三种链接属性(external、internal、none)的浅析
- c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
- c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
- 详解C语言external-internal-none链接属性
- c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
- 详解C语言external-internal-none链接属性
- c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
- C语言external-internal-none链接属性
- c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
- c语言3种链接属性: 外部(external), 内部(internal),无设置(none)
- external和internal以及none链接属性的讲解
- C和指针 第三章 链接属性 extern、internal、none
- 分享:C语言中变量的链接属性
- a:focus{outline: none;} 如何去掉点击链接时周围的虚线框outline属性
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C/C++的几种链接属性浅析
- C语言提高之——C语言中的作用域、链接属性和存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型 分类: 嵌入式开发学习 2014-11-28 10:42 233人阅读 评论(0) 收藏
- C语言中的链接属性