external和internal以及none链接属性的讲解

来源:互联网 发布:软件测试岗位需求 编辑:程序博客网 时间:2024/05/21 20:12
㈠. 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()  
{
}  
--------------------------------------------------------------------------------------------------------------
-------------------------------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;
}
0 0
原创粉丝点击