精华内容
下载资源
问答
  • 多个c文件共享同一个变量,即全局变量
  • 在改变值得文件中:头文件件中用extern声明是外不可用,在cpp中再声明遍(不用extern),然后就可以在cpp文件中改变值使用了。 在使用的cpp文件中:头文件中不用管,只在cpp文件中,直接使用就可以了,

    1.

    a.h

    extern int ch;


    a.cpp

    int ch;

    ch=10;

    ...


    b.h


    b.cpp


    cout<<ch;


    在改变值得文件中:头文件件中用extern声明是外不可用,在cpp中再声明一遍(不用extern),然后就可以在cpp文件中改变值使用了。

    在使用的cpp文件中:头文件中不用管,只在cpp文件中,直接使用就可以了,但是不能改变其值;只能使用。

    展开全文
  • 多个文件中如何共用全局变量

    千次阅读 2020-02-19 12:17:07
    多个文件中如何共用全局变量 例子: 头文件:state.h源文件:state.cpp 其它源文件:t1.cppt2.cpp t3.cpp,这些源文件都包含头文件state.h。 需要定义全局变量供这些源文件中使用:方法如下 1、在 state...

    多个文件中如何共用一个全局变量

    例子:

    头文件:state.h   源文件:state.cpp       

     其它源文件:t1.cpp  t2.cpp  t3.cpp, 这些源文件都包含头文件state.h。

    需要定义一个全局变量供这些源文件中使用:方法如下

    1、在 state.h声明全局变量: extern inta;

    2、在state.cpp中定义该全局变量:int a =10;

    这样其它源文件就可以使用该变量啦

     

     

    这里需要的是“声明”,不是“定义”!根据C++标准的规定,一个变量声明必须同时满足两个条件,否则就是定义:  
     (1)声明必须使用extern关键字;(2)不能给变量赋初值    
      extern  int  a;  //声明 


     int  a;   //定义

     int  a  =  0; //定义

     extern  int  a  =0;   //定义

     

     

         头文件中应使用extern关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可。头文件请不要定义任何变量,那是非常业余的行为……

        一般在头文件中申明,用extern,在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。

        头文件只能申明全局变量(extern),不可定义(不推荐使用)    .cpp里,在最外层定义即可(int gi),直接引用

    如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效,在别的文件中无效
    在.h里使用static定义,不会进行编译(.h文件不编译),只会在其每个include的cpp文件中包含编译,相当于在.cpp里使用static定义。

    转载:http://www.cnblogs.com/yyxt/p/3891712.html

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。

          也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载啊,在这里不去过多的论述这个问题,如果你有兴趣可以去网上搜索,相信你可以得到满意的解释!(C++ 和 C 采用的名称修饰规则不同)
        第二,当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。

    2 问题:extern 变量
      在一个源文件里定义了一个数组:char a[6];
      在另外一个文件里用下列语句进行了声明:extern char *a;
      请问,这样可以吗? 
      答案与分析:
      1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。
      2)、例子分析如下,如果a[] = "abcd",则外部变量a=0x61626364 (abcd的ASCII码值),*a显然没有意义
      显然a指向的空间(0x61626364)没有意义,易出现非法内存访问。
      3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。
      4)、extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

    3 问题:单方面修改extern 函数原型
      当函数提供方单方面修改函数原型时,如果使用方不知情继续沿用原来的extern申明,这样编译时编译器不会报错。但是在运行过程中,因为少了或者多了输入参数,往往会照成系统错误,这种情况应该如何解决?
      答案与分析:
      目前业界针对这种情况的处理没有一个很完美的方案,通常的做法是提供方在自己的xxx_pub.h中提供对外部接口的声明(extern),然后调用方include该头文件,从而省去extern这一步。以避免这种错误。
      宝剑有双锋,对extern的应用,不同的场合应该选择不同的做法。

    4 问题:extern “C”
      在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?

      答案与分析:
      C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
      下面是一个标准的写法:

    复制代码

    复制代码

    //在.h文件的头上
    #ifdef __cplusplus
    #if __cplusplus
    extern "C"{
     #endif
     #endif /* __cplusplus */ 
     …
     …
     //.h文件结束的地方
     #ifdef __cplusplus
     #if __cplusplus
    }
    #endif
    #endif /* __cplusplus */ 

    复制代码

    复制代码

     

    5 问题:extern 函数声明
      常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用?
      答案与分析:
      如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:

    extern int f(); 
    
    int f();


      当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。关于这样做的原因和利弊可见下面的这个例子:“用extern修饰的全局变量”

        (1) 在test1.h中有下列声明:

        #ifndef TEST1H
        #define TEST1H
        extern char g_str[]; // 声明全局变量g_str
        void fun1();
        #endif

        (2) 在test1.cpp中

        #include "test1.h"
            char g_str[] = "123456"; // 定义全局变量g_str
            void fun1() { cout << g_str << endl; }

        (3) 以上是test1模块, 它的编译和连接都可以通过,如果我们还有test2模块也想使用g_str,只需要在原文件中引用就可以了

        #include "test1.h"
    
         void fun2()    { cout << g_str << endl;    }

        以上test1和test2可以同时编译连接通过,如果你感兴趣的话可以用ultraEdit打开test1.obj,你可以在里面找到"123456"这个字符串,但是你却不能在test2.obj里面找到,这是因为g_str是整个工程的全局变量,在内存中只存在一份,test2.obj这个编译单元不需要再有一份了,不然会在连接时报告重复定义这个错误!

    注意:如果使用到sizeof,声明数组需要指定大小 extern char g_str[7]; 因为test2模块中只是声明了一个数组,但具体多大,并不知道。若没有在.h文件中声明数组大小,会报“非法的sizeof操作数”的错误。

      (4) 有些人喜欢把全局变量的声明和定义放在一起,这样可以防止忘记了定义,如把上面test1.h改为
       

    extern char g_str[] = "123456"; // 这个时候相当于没有extern

        然后把test1.cpp中的g_str的定义去掉,这个时候再编译连接test1和test2两个模块时,会报连接错误,这是因为你把全局变量g_str的定义放在了头文件之后,test1.cpp这个模块包含了test1.h所以定义了一次g_str,而test2.cpp也包含了test1.h所以再一次定义了g_str,这个时候连接器在连接test1和test2时发现两个g_str。如果你非要把g_str的定义放在test1.h中的话,那么就把test2的代码中#include "test1.h"去掉 换成:

    extern char g_str[];  // 没有include “test1.h”
    void fun2()   {  cout << g_str << endl;   }


       这个时候编译器就知道g_str是引自于外部的一个编译模块了,不会在本模块中再重复定义一个出来,但是我想说这样做非常糟糕,因为你由于无法在test2.cpp中使用#include "test1.h",那么test1.h中声明的其他函数你也无法使用了,除非也用都用extern修饰,这样的话你光声明的函数就要一大串,而且头文件的作用就是要给外部提供接口使用的,所以 请记住, 只在头文件中做声明,真理总是这么简单。

    6. extern 和 static

     (1) extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.
     (2) static 表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.

        static 作用范围是内部连接的关系, 和extern有点相反.它和对象本身是分开存储的,extern也是分开存储的,但是extern可以被其他的对象用extern 引用,而static 不可以,只允许对象本身用它. 具体差别首先,static与extern是一对“水火不容”的家伙,也就是说extern和static不能同时修饰一个变量;其次,static修饰的全局变量声明与定义同时进行,也就是说当你在头文件中使用static声明了全局变量(类外部)后(如果在头文件的class内部声明static变量,那么其定义式通常位于实现(.cpp)文件中,例外的,只有const int类型可以in class 初值设定),它也同时被定义了;最后,static修饰全局变量的作用域只能是本身的编译单元(内部链接,参见 存储持续性、作用域和链接性),也就是说它的“全局”只对本编译单元有效,其他编译单元则看不到它,如:
        (1) test1.h:

    #ifndef TEST1H
    #define TEST1H
    static char g_str[] = "123456"; 
    void fun1();
    #endif

        (2) test1.cpp:

    #include "test1.h"
    void fun1()  {   cout << g_str << endl;  }

        (3) test2.cpp

    #include "test1.h"
    void fun2()  {   cout << g_str << endl;  }

        以上两个编译单元可以连接成功, 当你打开test1.obj时,你可以在它里面找到字符串"123456",同时你也可以在test2.obj中找到它们,它们之所以可以连接成功而没有报重复定义的错误是因为虽然它们有相同的内容,但是存储的物理地址并不一样,就像是两个不同变量赋了相同的值一样,而这两个变量分别作用于它们各自的编译单元。 也许你比较较真,自己偷偷的跟踪调试上面的代码,结果你发现两个编译单元(test1,test2)的g_str的内存地址相同,于是你下结论static修饰的变量也可以作用于其他模块,但是我要告诉你,那是你的编译器在欺骗你,大多数编译器都对代码都有优化功能,以达到生成的目标程序更节省内存,执行效率更高,当编译器在连接各个编译单元的时候,它会把相同内容的内存只拷贝一份,比如上面的"123456", 位于两个编译单元中的变量都是同样的内容,那么在连接的时候它在内存中就只会存在一份了,如果你把上面的代码改成下面的样子,你马上就可以拆穿编译器的谎言:
        (1) test1.cpp:

    #include "test1.h"
    void fun1()
    {
       g_str[0] = ''a'';
       cout << g_str << endl;
    }

        (2) test2.cpp

    #include "test1.h"
    void fun2()  {  cout << g_str << endl;  }

        (3) 

    void main()     {
            fun1(); // a23456
            fun2(); // 123456
        }

        这个时候你在跟踪代码时,就会发现两个编译单元中的g_str地址并不相同,因为你在一处修改了它,所以编译器被强行的恢复内存的原貌,在内存中存在了两份拷贝给两个模块中的变量使用。正是因为static有以上的特性,所以一般定义static全局变量时,都把它放在原文件中而不是头文件,这样就不会给其他模块造成不必要的信息污染,同样记住这个原则吧!

    7. extern 和const

       C++中const修饰的全局常量据有跟static相同的特性,即它们只能作用于本编译模块中,但是const可以与extern连用来声明该常量可以作用于其他编译模块中, 如extern const char g_str[];
        然后在原文件中别忘了定义:     const char g_str[] = "123456"; 

        所以当const单独使用时它就与static相同,而当与extern一起合作的时候,它的特性就跟extern的一样了!所以对const我没有什么可以过多的描述,我只是想提醒你,const char* g_str = "123456" 与 const char g_str[] ="123465"是不同的, 前面那个const 修饰的是char *而不是g_str,它的g_str并不是常量,它被看做是一个定义了的全局变量(可以被其他编译单元使用), 所以如果你像让char*g_str遵守const的全局常量的规则,最好这么定义const char* const g_str="123456".

    【转】http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html

     

    /*************************************************************************/

    extern 用法,全局变量与头文件(重复定义) 

    用#include 可以包含其他头文件中变量、函数的声明,为什么还要extern关键字,如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx.h包含了a的声明)不就可以了么,为什么还要用extern呢??这个问题一直也是似是而非的 困扰着我许多年了,今天上网狠狠查了一下总算小有所获了:

    头文件

    首先说下头文件,其实头文件对计算机而言没什么作用,她只是在预编译时在#include的地方展开一下,没别的意义了,其实头文件主要是给别人看的。

    我做过一个实验,将头文件的后缀改成xxx.txt,然后在引用该头文件的地方用

    #include"xxx.txt"

    编译,链接都很顺利的过去了,由此可知,头文件仅仅为阅读代码作用,没其他的作用了!

    不管是C还是C++,你把你的函数,变量或者结构体,类啥的放在你的.c或者.cpp文件里。然后编译成lib,dll,obj,.o等等,然后别人用的时候最基本的gcc hisfile.cpp yourfile.o|obj|dll|lib 等等。
    但对于我们程序员而言,他们怎么知道你的lib,dll...里面到底有什么东西?要看你的头文件。你的头文件就是对用户的说明。函数,参数,各种各样的接口的说明。
    那既然是说明,那么头文件里面放的自然就是关于函数,变量,类的“声明”了。记着,是“声明”,不是“定义”。
    那么,我假设大家知道声明和定义的区别。所以,最好不要傻嘻嘻的在头文件里定义什么东西。比如全局变量:

    #ifndef _XX_头文件.H
    #define _XX_头文件.H
    int A;
    #endif

    那么,很糟糕的是,这里的int A是个全局变量的定义,所以如果这个头文件被多次引用的话,你的A会被重复定义.
    显 然语法上错了。只不过有了这个#ifndef的条件编译,所以能保证你的头文件只被引用一次,不过也许还是会岔子,但若多个c文件包含这个头文件时还是会 出错的,因为宏名有效范围仅限于本c源文件,所以在这多个c文件编译时是不会出错的,但在链接时就会报错,说你多处定义了同一个变量,

    Linking...
    incl2.obj : error LNK2005: "int glb" (?glb@@3HA) already defined in incl1.obj
    Debug/incl.exe : fatal error LNK1169: one or more multiply defined symbols found

    注意!!!

    extern

    这个关键字真的比较可恶,在声明的时候,这个extern居然可以被省略,所以会让你搞不清楚到底是声明还是定义,下面分变量和函数两类来说:

    (1)变量

    尤其是对于变量来说。

    extern int a;//声明一个全局变量a
    int a; //定义一个全局变量a
    extern int a =0 ;//定义一个全局变量a 并给初值。
    int a =0;//定义一个全局变量a,并给初值,

    第四个 等于 第 三个,都是定义一个可以被外部使用的全局变量,并给初值。
    糊涂了吧,他们看上去可真像。但是定义只能出现在一处。也就是说,不管是int a;还是extern int a=0;还是int a=0;都只能出现一次,而那个extern int a可以出现很多次。

    当你要引用一个全局变量的时候,你就要声明,extern int a;这时候extern不能省略,因为省略了,就变成int a;这是一个定义,不是声明。

    (2)函数
    对于函数也一样,也是定义和声明,定义的时候用extern,说明这个函数是可以被外部引用的,声明的时候用extern说明这是一个声明。 但由于函数的定义和声明是有区别的,定义函数要有函数体,声明函数没有函数体,所以函数定义和声明时都可以将extern省略掉,反正其他文件也是知道这个函数是在其他地方定义的,所以不加extern也行。两者如此不同,所以省略了extern也不会有问题。
    比如:

    int fun(void)
    {
        return 0;
    }

    很好,我们定义了一个全局函数

    int fun(void);

    我们对它做了个声明,然后后面就可以用了, 加不加extern都一样.
    我们也可以把对fun的声明 放在一个头文件里,最后变成这样

    int fun(void);//函数声明,所以省略了extern,完整些是extern int fun(void);
    int fun(void)
    {
      return 0;
    }//一个完整的全局函数定义,因为有函数体,extern同样被省略了。

    然后,一个客户,一个要使用你的fun的客户,把这个头文件包含进去,ok,一个全局的声明。没有问题。
    但是,对应的,如果是这个客户要使用全局变量,那么要extern 某某变量;不然就成了定义了。

    总结下:

    对变量而言,如果你想在本源文件中使用另一个源文件的变量,就需要在使用前用extern声明该变量,或者在头文件中用extern声明该变量;

    对函数而言,如果你想在本源文件中使用另一个源文件的函数,就需要在使用前用声明该变量,声明函数加不加extern都没关系,所以在头文件中函数可以不用加extern。

    C程序采用模块化的编程思想,需合理地将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求,在模块的划分上主要依据功能。模块由头文件和实现文件组成,对头文件和实现文件的正确使用方法是:
    规则1 头文件(.h)中是对于该模块接口的声明,接口包括该模块提供给其它模块调用的外部函数及外部全局变量,对这些变量和函数都需在.h中文件中冠以extern关键字声明;
    规则2 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;
    规则3 永远不要在.h文件中定义变量;
    许多程序员对定义变量和声明变量混淆不清,定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:
    int a = 5;
    #include “module1.h”
    #include “module1.h”
    #include “module1.h”
    以上程序的结果是在模块1、2、3中都定义了整型变量a,a在不同的模块中对应不同的地址单元,这明显不符合编写者的本意。正确的做法是:
    extern int a;
    #include “module1.h”
    int a = 5;
    #include “module1.h”
    #include “module1.h”  
    这样如果模块1、2、3操作a的话,对应的是同一片内存单元。


    规则4 如果要用其它模块定义的变量和函数,直接包含其头文件即可。
    许多程序员喜欢这样做,当他们要访问其它模块定义的变量时,他们在本模块文件开头添加这样的语句:
    extern int externVar; 
    抛弃这种做法吧,只要头文件按规则1完成,某模块要访问其它模块中定义的全局变量时,只要包含该模块的头文件即可。

    共享变量声明
    就像在函数间共享变量的方式一样,变量可以在文件中共享。为了共享函数,要把函数的定义放在一个源文件中,然后在需要调用此函数的其他文件中放置声明。共享变量的方法和此方式非常类似。
    在此之前,不需要区别变量的声明和它的定义。为了声明变量i,写成如下形式:
    int i; 
    这样不仅声明i是int型的变量,而且也对i进行了定义,从而使编译器为i留出了空间。为了声明没有定义的变量i,需要在变量声明的开始处放置关键字extern:
    extern int i;
    extern提示编译器变量i是在程序中的其他位置定义的(大多数可能是在不同的源文件中),因此不需要为i分配空间。
    顺便说一句,extern可以用于所有类型的变量。在数组的声明中使用extern时,可以忽略数组的长度:
    extern int a[];
    因为此刻编译器不用为数组a分配空间,所以也就不需要知道数组a的长度了。
    为了在几个源文件中共享变量i,首先把变量i的定义放置在一个文件中:
    int i;
    如果需要对变量i初始化,那么可以在这里放初始值。在编译这个文件时,编译器将会为变量i分配内存空间,而其他文件将包含变量i的声明:
    extern int i;
    通过在每个文件中声明变量i,使得在这些文件中可以访问/或修改变量i。然而,由于关键字extern,使得编译器不会在每次编译其中某个文件时为变量i分配额外的内存空间。
    当在文件中共享变量时,会面临和共享函数时相似的挑战:确保变量的所有声明和变量的定义一致。
    为了避免矛盾,通常把共享变量的声明放置在头文件中。需要访问特殊变量的源文件可以稍后包含适当的头文件。此外,含有变量定义的源文件包含每一个含有变量声明的头文件,这样使编译器可以检查两者是否匹配。

    如果工程很大,头文件很多,而有几个头文件又是经常要用的,那么
    1。把这些头文件全部写到一个头文件里面去,比如写到preh.h
    2。写一个preh.c,里面只一句话:#include "preh.h"
    3。对于preh.c,在project setting里面设置creat precompiled headers,对于其他c文件,设置use precompiled header file

     

     

    展开全文
  • 项目中经常需要用到多个文件共有全局变量的情况,网上找了两篇比较好的,收藏一下。 c++多个文件中如何共用全局变量 C/C++中extern关键字详解 ...

    项目中经常需要用到多个文件共有一个全局变量的情况,网上找了两篇比较好的,收藏一下。

    c++多个文件中如何共用一个全局变量

    C/C++中extern关键字详解

    展开全文
  • Python是种面向对象的开发语言,在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用,下面介绍下Python全局变量有关问题。 应该尽量避免使用Python全局变量。不同的模块都可以...

    Python是一种面向对象的开发语言,在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用,下面介绍下Python全局变量有关问题。

    应该尽量避免使用Python全局变量。不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性。对全局变量,如果程序员甲修改了_a的值,这时可能导致程序中的错误。这种错误是很难发现和更正的。

    全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量。 但是某些时候,Python全局变量能够解决局部变量所难以解决的问题。事物要一分为二。 python里面全局变量有两种灵活的用法:

    1.   #gl.py 

    2.   gl_1 = 'hello'

    3.   gl_2 = 'world'

    4.    

    5.   在其它模块中使用 

    6.   #a.py 

    7.   import gl 

    8.    

    9.   def hello_world() 

    10.      print gl.gl_1, gl.gl_2 

    11.   

    12.  #b.py 

    13.  import gl 

    14.   

    15.  def fun1() 

    16.      gl.gl_1 = 'Hello'

    17.      gl.gl_2 = 'World'

    18.  def modifyConstant() :  

    19.          global CONSTANT  

    20.          print CONSTANT  

    21.          CONSTANT += 1  

    22.          return  

    23.   

    24.  if __name__ =='__main__' :  

    25.          modifyConstant()  

    26.          print CONSTANT  

    1 声明法

    在文件开头声明Python全局变量variable, 在具体函数中使用该变量时,需要事先声明 global variable,否则系统将该变量视为局部变量。 CONSTANT = 0 (将全局变量大写便于识别)

    2模块法(推荐)

    ,推荐!

    1.   #gl.py 

    2.   gl_1 = 'hello'

    3.   gl_2 = 'world'

    4.    

    5.   在其它模块中使用 

    6.   #a.py 

    7.   import gl 

    8.    

    9.   def hello_world() 

    10.      print gl.gl_1, gl.gl_2 

    11.   

    12.  #b.py 

    13.  import gl 

    14.   

    15.  def fun1() 

    16.      gl.gl_1 = 'Hello'

    17.      gl.gl_2 = 'World'

    18.  def modifyConstant() :  

    19.          global CONSTANT  

    20.          print CONSTANT  

    21.          CONSTANT += 1  

    22.          return  

    23.   

    24.  if __name__ =='__main__' :  

    25.          modifyConstant()  

    26.          print CONSTANT  

     

    展开全文
  • 在a.h 中申明一个全局变量extern int a; 在a.cpp中定义一个全局变量 int a =3。 在b.cpp中需要用到该全局变量有两种方式,种方式:... 另种方式: 在b.cpp中申明 用extern int a ,这样就可以使用个全局变量了。
  • 然后在其中一个.cpp文件中定义全局变量;最后就可以在其它.cpp文件使用全局变量。 验证步骤 1.新建global.h文件 #include <cstring> #include <iostream> using namespace std; extern string tmp...
  • 如果想使用一个全局变量m,使m能够在两.cpp文件中都能使用,则方法如下: 1,在1.h头文件中 extern char m[]; 2,在1.cpp文件中 #include"1.h" char m[6]; 3,在main文件中,#include“...
  • 比喻在你的主工程上main.CPP 定义了一个全局变量 int number=0; 那么在别的文件怎么使用呢?? 在需要使用变量的文件上写上 extern int number;  就不会报错了 有用就评论一下谢谢你!!
  • 转载原文地址: ...那么,很糟糕的是,这里的intA是个全局变量的定义,所以如果这头文件被次引用的话,你的A会被重复定义 显然语法上错了。只不过有了这#ifndef的条件编译,所以能保证你的头文...
  • c++ 头文件的使用:https://blog.csdn.net/weixin_42018112/article/details/82357002 头文件只是用来声明的,...1)不管变量还是函数先声明 或者直接定义才能使用,声明能声明n次,同一个作用域里面 定义只能定义...
  • 声明是告诉程序,这地方有个变量,定义是为变量开辟空间,赋值是开辟空间后给值 、基础用法 例如下面这a.cpp程序: #include "myhead.h" #include <iostream> int main() { std::cout << a; ...
  • 1、普通全局变量:假设我们需要在多个不同的编译单元(比如两个.cc文件)中使用全局变量进行传值,如我们有如下三个源码文件:main.cc:运行入口,有个main函数,其中会打印出全局变量var的值;#include "def.h" ...
  • 在项目中有时会用到跨文件全局变量,这次在实现鼠标事件时,用到了全局变量,在此记录、总结当前所学习到的内容。 先附上参考链接: 链接1 头文件中不要定义变量: 如果你的头文件被次引用,那么一个变量会被...
  • 大家应该都知道,C语言定义的变量的作用范围是从定义的位置起,到特定... 那么,进入正题了,C语言所谓的全局变量多个.c文件中到底该怎样使用? 首先说一下全局变量的特性: 全局变量可以定义在个.c文件中,...
  • extern方法假设我们有个头文件commondef.h和commondef.cpp文件,第步...这样,我们就能在多个.cpp文件使用变量a;说明:a. extern声明,必须要满足两个条件:是声明必须使用extern关键字;二是不能给变量赋初值
  • 使用一个全局变量

    2014-03-25 17:11:46
    新的程序员经常使用全局变量,因为他们是容易的工作,特别是当涉及到许多功能。然而,这是一个非常糟糕的主意。事实上,一般应完全避免全局变量! 为什么全局变量是邪恶的 应该避免全局变量,有几原因
  • 1.在A.cpp 中声明: extern int a; 2.在A.cpp【注意和上面A.h对应】中定义: int a; 或 int a=0;\ 3.在其他源文件中直接访问即可 c.cpp中: a=10; 参考:...
  • 上周编程的时候犯了一个错误,...下面就介绍两种方法,同一个全局变量被两.c文件访问。 (1)不用头文件在file_a.c中定义一个全局变量:int flag ; 在file_b.c中:extern int falg;即可。(2)利用头文件在file_a.
  • 如果是多个文件中同一变量,是由C语言编译器中的linker解决的。首先,要编译的文件中的符号(函数名,全局变量名)分为weak和strong类型。weak symbol:未初始化的全局变量strong symbol:函数名,初始化的全局变量...

空空如也

空空如也

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

多个文件使用同一个全局变量