精华内容
下载资源
问答
  • 1,外部全局变量 概念:可以被其他文件访问的全局变量称之为全局变量。默认情况下,所有的全局变量都是外部全局变量。 可以使用 extern显性声明一个外部全局变量 特点: 可以定义同名的多个外部全局变量;多个...

    1,外部全局变量

    概念:可以被其他文件访问的全局变量称之为全局变量。默认情况下,所有的全局变量都是外部全局变量。

    可以使用 extern显性声明一个外部全局变量

    特点: 可以定义同名的多个外部全局变量;多个同名的外部全局变量指向同一块存储空间

    eg:

    extern int num;


    2,内部全局变量

    概念:只能被当前文件访问的全局变量,我们称之为内部全局变量 。

    使用static关键字定义内部全局变量。

    特点:

    也可以定义多个同名的内部全局变量;如果多个同名的全局变量不在同一个文件中,那么它们将指向不同的存储空间。

    eg:

    static int num;


    3,声明和定义的区别

    声明:不会立即开辟存储空间,只能等赋值后,才开辟存储空间。

    定义:会立即开辟存储空间

    展开全文
  • #pragma mark 内部全局变量和外部全局变量 ###pragma mark 概念 /** 默认情况下所有的全局变量都是 外部全局变量 只要给全局变量加上 static 关键字 就是内部全局变量 外:多个同名的外部全局变量 指向 同一块...

    #pragma mark 内部全局变量和外部全局变量 ###pragma mark 概念

    /**
     默认情况下所有的全局变量都是 外部全局变量
    只要给全局变量加上 static 关键字 就是内部全局变量
     
     外:多个同名的外部全局变量 指向 同一块存储空间
     内:多个同名的全局变量 如果不在同一个文件中,那么指向不同的存储空间
    
     只要用static修改的全局变量就是内部全局变量,只能在当前文件中使用
     
     extern:
     用于声明一个外部全局变量
     声明只需要在使用变量之前声明就可以了
     static:
     用于定义一个内部全局变量
     声明和定义的区别:
     声明不会开辟存储空间
     定义会开辟存储空间
     
     */
    

    ###pragma mark 代码 ####mian.c

    #include <stdio.h>
    #include "lyh.h"
    /*
     全局变量分为两种:
     1.外部全局变量,默认情况下所有的全局变量都是外部全局变量
        什么是外部全局变量? 可以被其他文件访问的全局变量 我们称之为 外部全局变量
     
     2. 内部全局变量, 只要给全局变量加上 static 关键字 就是内部全局变量
        什么是内部全局变量? 只能被当前文件访问的全局变量 我们称之为 内部全局变量
     
     外部全局变量 有一个特点:
        可以定义同名的外部全局变量
        多个同名的外部全局变量 指向 同一块存储空间
     
     内部全局变量 又一个特点:
        也可以定义多个同名的内部全局变量
        多个同名的全局变量 如果不在同一个文件中,那么指向不同的存储空间
     
     为了提高数据的安全性, 不让别人在其他文件中修改我们的全局变量,C语言提供了另外一个用于修改全局变量的关键字,static
     // 只要用static修改的全局变量就是内部全局变量,只能在当前文件中使用
     这样就可以提高我们全局变量的安全性
     
     如果多个文件中存在同名的 内部全局变量,相互不影响
     如果既有外部全局变量 也有内部全局变量, 那么会优先访问内部全局变量
     
     extern:
        用于声明一个外部全局变量
        声明只需要在使用变量之前声明就可以了
     static:
        用于定义一个内部全局变量
     声明和定义的区别:
        声明不会开辟存储空间
        定义会开辟存储空间
     */
    
    // 编译 出现 main.o
    // 说我在 mian.c 里面定义了一个num
    
    // int num; // 外部全局变量
    
    static int num; // 内部全局变量
    int main()
    {
        /*
         Undefined symbols for architecture x86_64:
         "_test", referenced from:
         _main in main.o
         ld: symbol(s) not found for architecture x86_64
         clang: error: linker command failed with exit code 1 (use -v to see invocation)
         
        找不到text函数
         
         */
        num = 998; 
        test();
        printf("main.c num = %i\n",num);
    
        return 0;
    }
    
    
    

    ####lyh.c

    #include "lyh.h"
    // duplicate symbol _num in: 说我重复定义了一个num
    
    /*
    // 编译 出现 lyh.o
    // 说我在1 mian.c 里面定义了一个num
    //int num;   // 由于Xcode6升级之后导致的,在Xcode6以前是可以的
     如果在lyh.c当中 定义外部全局变量 num, 那么我们说过 同名的外部全局变量 指向同一块存储空间,那么如果在多个文件中有同名的外部全局变量,可能导致a文件的数据被B文件不小心修改
     降低了数据的封装性,提高了错误的风险
    */
    // extern 关键字 用于修饰全局变量, 代表声明一个全局变量
    // 注意:声明全局变量 和 声明函数 一样 , 仅仅是告诉系统我们有这个全局变量, 但并不会真正的开辟存储空间
    //extern int num;    // 如果使用命令行输出 不会有问题 cc-c mian.c  cc - lyh.c 生成 .o文件 然后  cc mian.o lyh.o 生成a.out
    /**
     Undefined symbols for architecture x86_64:
     "_num", referenced from:
     _test in lyh.o
     
     extern 是声明一个变量, 而不是开辟一块存储空间
     */
    //int num;
    void test()
    {
    extern int num;
        printf("lyh.c num = %i\n",num);
        num = 666;
    }
    int num;
    

    转载于:https://my.oschina.net/u/3561184/blog/1204119

    展开全文
  •  外部全局变量(extern)  1)用extern拓展一个文件内的全局变量的作用范围  2)使用extern声明能够在一个文件中调用其他文件中定义的变量    弊端:执行一个文件中的函数,可能会改变全局变量的值,从而影响...

    知识点总结:

           外部全局变量(extern)

                  1)用extern拓展一个文件内的全局变量的作用范围
                  2)使用extern声明能够在一个文件中调用其他文件中定义的变量

                 

                  弊端:执行一个文件中的函数,可能会改变全局变量的值,从而影响到另一个文件中函数的执行结果


           静态全局变量(static)

                   用static声明静态全局变量:限制本文件外使用


           PS:在函数内声明一个静态局部变量,该变量一直保留上一次的调用结果直到调用结束,但其影响范围只限于该函数内

    展开全文
  • 一、外部函数(定义时默认) 在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。 如果在定义函数时省略extern,则默认为外部函数。 但是,在调用外部函数时,声明...

    一、外部函数(定义时默认)

    在定义函数时,如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其他文件调用。

    如果在定义函数时省略extern,则默认为外部函数

    但是,在调用外部函数时,声明中不可省略extern

    /*
    另一个文件max.c中
    */
    extern int max(int x,int y)//定义时,也可以不加extern,默认即为外部函数
    {
        int z;
        z=x>y?x:y;
        return z;
    }
    
    #include <stdio.h>
    extern int max(int,int);//调用外部函数时,则必须在声明是加上“extern”
    int main()
    {
        int a,b;
        scanf("%d %d",&a,&b);
        printf("%d",max(a,b));
        return 0;
    }
    

    二、静态函数(static)

    如果一个函数只能被本文件中其他函数所调用,它称为内部函数,又称静态(static)函数。

     如果在不同的文件中有同名的内部函数,互不干扰。

    通常把只允许在同一文件中使用的函数和全局变量前面冠以static使之局部化,从而其他文件都不能引用。

    三、外部全局变量(定义时默认)

    全局变量的作用域仅从定义开始,至文件结束,因此一般全局变量需要定义在最顶端;

    #include <stdio.h>
    int max(int,int);
    int a=1,b=2;//定义的全局变量,作用范围从定义处至文件结束
    int main()
    {
        printf("%d",max(a,b));
        return 0;
    }
    //int a=2,b=3;如果全局变量在此处定义,则主函数中无法使用,作用域仅从定义开始
    int max(int x,int y)
    {
        int z;
        z=x>y?x:y;
        return z;
    }

     

    1、用extern拓展一个文件内的全局变量的作用范围

    注:不用extern,采用“首部定义”的方法,在本文件内同样可以扩展全局变量的作用范围;(不加extern时即默认为外部)

    #include <stdio.h>
    int max(int,int);
    extern int a,b;//声明全局变量a,b,扩展其作用范围!
    int main()
    {
        printf("%d",max(a,b));
        return 0;
    }
    int a=5,b=111;//全局变量在此处定义,则主函数中无法使用,作用域仅从定义开始
    int max(int x,int y)
    {
        int z;
        z=x>y?x:y;
        return z;
    }
    #include <stdio.h>
    int max(int,int);
    int a,b;//虽然没加extern,但同样声明了外部全局变量a,b,扩展其作用范围!
    int main()
    {
        printf("%d",max(a,b));
        return 0;
    }
    int max(int x,int y)
    {
        int z;
        z=x>y?x:y;
        return z;
    }
    int a=11,b=123;//全局变量的赋值虽然放在了最后,但是程序首部有定义,不妨碍使用!

     

    2、用extern声明其他文件中定义的外部变量

    使用extern声明就能够在一个文件中调用其他文件中定义的变量,或者说把该变量的作用域扩展到本文件。

    慎重扩展全局变量的作用域!

    虽然可以为程序设计带来方便

    但是执行一个文件中的函数时,可能会改变了该全局变量的值,从而会影响到另一文件中的函数执行结果。

    四、静态全局变量

    当一个文件中定义的变量

    用static声明静态全局变量:限制本文件外使用

    定义全局变量时加一个static声明,该变量只限于被本文件引用,而不能被其他文件引用

    但是,静态全局变量与静态局部变量一样,在函数调用多次以后,容易搞不清楚当前值。

    备注:

    对于外部全局变量,要谨慎使用!

    例如在同一个项目的不同文件中,都定义了int a,对该项目进行编译时,就会报错;

    因此,尽量限制使用外部全局变量。

     

    局部变量 自动 auto 定义时不加auto,默认为自动 在动态区存储,当函数执行完时,该变量占用的内存空间被释放,其变量值值变为随机值
    静态 static 在函数内定义 长期占用静态存储区,直至程序结束才被释放;多次调用后,变量的当前值不易确定
    全局变量 外部 extern 定义时不加extern,默认为外部 静态区存储,可以被其它文件调用,因此同一项目内的不同文件中的函数参数不能使用同一变量名
    静态 static 文件中定义 静态区存储,仅在本文件内使用,不能被其它文件使用
             
    外部函数 extern 定义时不加extern,默认为外部函数 调用时,必须声明extern;不同文件可调用
    静态函数 static 文件内定义 只能被本文件中其他函数所调用,不同文件中的同名函数互不影响。

     

     

    展开全文
  • ---------------  main.m  --------------- #import int change();  // 声明外部函数 int main() ...声明外部全局变量  change();  // 调用外部函数   NSLog(@"%d"
  • 贺老师教学链接 C语言及程序设计进阶 本课讲解常见的全局变量使用形式#include int a=15,b=-7; //定义全局变量a,b int max(int,int); int main( ) { printf("%d\n", max(a,b)); return 0; } int max(int x,int ...
  •  网上找了下说(标题)是正确...如上面函数, 原本我以为没有定义全局变量 x ,函数内直接声明 x=222 会报错, 但是并没有报错, print(x) 也输出了值,  我一直理解的是应该先定义一个全局变量 如下: <p>... ...
  • 如上面函数, 原本我以为没有定义全局变量 x ,函数内直接声明 x=222 会报错, 但是并没有报错, print(x) 也输出了值,  我一直理解的是应该先定义一个全局变量 如下: <p>... <p><code>x = 0</code></...
  • 若一个变量需要在同一个工程中不同文件直接使用或修改,则需要将自变量做extern声明。只需将该变量在其中一个文件中定义,然后在另外一个文件中使用extern声明,且两个变量类型需一致。在单片机程序中,只需将extern...
  • vs2010外部全局变量在其它文件使用

    千次阅读 2018-08-03 11:09:26
    1、在cpp文件中定义变量 RD_OS_Static_ACCType RD_OS_static_obj; //static object 2、在头文件中添加外部引用声明 extern RD_OS_Static_ACCType RD_OS_static_obj; //static object 3、在其它文件中添加该...
  • OC中栈区与堆区的内存概念: ...在这里,变量名其实就是变量保存在栈区的内存地址的别名。 那么,这个程序运行时在栈区是如何出入的呢? 程序在栈区的出入步骤: 程序运行执行main函数,i首
  • 这两种变量声明: 定义声明:简称定义,给变量分配...当不包含头文件而希望访问其他源文件的外部变量或者外部函数时时,都必须提前对他做引用声明,才能使用外部变量或函数,如: 在definition.cpp里定义声明 in...
  • 您可以按照以下方式做一些事情(在我测试它们时,它们在Python v2.7.15和v3.7.1中均有效):def hi():# other code...hi.bye = 42 # Create function attribute.sigh = 10hi()print(hi.bye) # ->...
  • 使用extern可以创建外部文件可以访问的全局变量。这样我们可以让多个类操控同一变量。通过它可以实现全局可变字符串。extern的使用方法: 1. 在需要初始化该变量的文件(如:func.m)中,定义变量NSMutableString *...
  • 一 今天做 leetcode 时,发现一个问题,比如下面这种情况: 1 def fun(): ...但是联想到之前这种情况是可以运行的,不同的是全局变量为数组 9 def fun(): 10 a.append(2) 11 a = [1] 12 fun() 13 print...
  • 搞懂全局变量外部变量、静态全局变量的区别全局变量外部变量静态全局变量 全局变量 全局变量是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。 如果外部变量不在文件的开头定义,其...
  • 区分静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)变量的分类来看 静态变量、动态变量、内部变量(局部变量)、外部变量(全局...
  • 全局变量外部变量

    2020-06-20 21:03:58
    全局变量的作用范围:                从变量定义位置开始到所在文件结束位置. 在C语言中,在function 中定义的变量的作用于仅限于本function,在子函数运行...
  • 外部变量 全局变量

    千次阅读 2010-04-05 20:52:00
     在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译...
  • 作用域 全局变量 局部变量 静态变量 外部变量 常量 volatile变量 作用域: 作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义...
  • 头文件中变量如果没有初始化就是声明;初始化了就是定义。在C++语言中,变量有且只能有一次...外部全局变量 外部连接性 可以被extern 静态全局变量(static) 内部连接性 不能被extern 常全局变量(const) 内部连接
  • 在编写程序的时候,常常会用到外部变量和全局变量。如:a.c和b.c两个c文件中都要用到变量x。 1、在a.c中定义全局变量int x=100;如果b.c中也要用x这个变量,那么应该在b.h中来进行定义extern int x;而不能再b.c中...
  • 局部变量和全局变量是从作用域...为什么很多地方就默认为内部变量和外部变量就是局部变量和全局变量 这样子的话那么这句话怎么理解呢?![图片说明](https://img-ask.csdn.net/upload/201603/07/1457318749_145328.png)
  • 外部变量与全局变量

    千次阅读 2017-10-14 14:18:25
     在一个头文件a.h中定义一些变量x,在其他.c文件中(b.c,c.c)要用到,在两个*.c中包含a.h以后,  编译时总是提示error:multiple definition of x。 解决思路:  当时本想采用extern变量的方法,但考虑到会使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,834
精华内容 3,533
关键字:

外部全局变量