您的位置:首页 > 其它

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

2016-12-28 22:21 357 查看
㈠. 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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: