精华内容
下载资源
问答
  • 一、全局变量  一般最好把全局变量声明在cpp文件中(如果在.h文件中定义的话,多层包含可能会引起重复定义的错误)  cpp中定义好了之后,可以在.h文件中利用 extern关键字进行 声明(extern 声明表示在此处引入...

    一、全局变量 

      一般最好把全局变量声明在cpp文件中(如果在.h文件中定义的话,多层包含可能会引起重复定义的错误)

      cpp中定义好了之后,可以在.h文件中利用 extern关键字进行 声明(extern 声明表示在此处引入外部定义变量的声明,而不是在本编译单元中再声明一个同名的局部变量)然后其他文件要使用这些变量的时候,只要#include 这个头文件就可以了,而且不会引起重复定义的错误。

     

    二、静态全局变量

      即使用static修饰的全局变量,它不能使用extern进行引入声明,即extern与static不可以一起使用;而且static全局变量与普通全局变量有很大不同。

      static修饰的全局变量声明与定义是一体的,在头文件中声明了static全局变量,同时也是定义了它。

      多个编译单元都包含static全局变量所在的头文件,不会引起重定义错误,因为每个编译单元都开辟了新的空间存储它。

    三、全局常量

      const全局变量使用起来与普通全局变量一样,在.cpp中定义并赋初值,在.h头文件中用extern进行声明,然后再需要使用的地方包含.h即可,在多个编译单元中其内存地址也不同(这一点与static全局变量类似),但是由于是常量,不能修改其值,所以即使内存地址不一样也没影响,值都一样。

     

    转载于:https://www.cnblogs.com/dj0325/p/8491748.html

    展开全文
  • 1.全局变量 全局变量的使用条件是,在.cpp文件中定义并初始化,添加格式如下: .cpp文件中添加: int g_nvalue = 9; 使用时,并不需要添加什么头文件,直接在要使用全局变量的.cpp中声明: extern int g_...

    以vc/vs开发的应用程序为例

    1.全局变量

    全局变量的使用条件是,在.cpp文件中定义并初始化,添加格式如下:

    .cpp文件中添加:

    int g_nvalue = 9;


    使用时,并不需要添加什么头文件,直接在要使用全局变量的.cpp中声明:

    extern int g_nvalue;

    然后就可以使用了

    那么为什么不需要头文件直接声明就可以使用了呢?

    原理:c/c++首先编译生成.obj文件,然后所有的.obj文件链接生成可执行文件,对于全局变量而言,虽然定义时在不同的文件中,但是链接时它们是全局可见的

     

    特殊类型:const全局变量

    const在c中默认是外链接,而在c++中默认是内链接

    意思是:在c中const定义的就是全局变量,按照上面的方式进行定义和声明即可使用,但是在c++中const默认是内链接,即在全局内定义的const全局变量默认是内链接,作用域在本文件,并不是全局可见的,即局部变量,类似于staic的作用范围

    如:在.cpp中定义:

    const int g_nvalue = 9;

    那么在另一个.cpp中使用它,这样声明:

    extern const int g_nvalue;

    编译时出错:提示找不到g_navalue

    那么如何解决呢?

    方法1:c++定义的const全局变量作用域既然域static一样,那么可以采用添加.h文件的方法,如:

    添加global.h文件,里面添加:

    extern const int g_nvalue;

    然后原来的定义const全局变量的.cpp中添加global.h,在要使用这个变量的.cpp中添加global.h,这样就可以使用const变量了

    实用例子:c++项目经常使用定义使用const全局变量的使用例子:

    .h中:

    namespace hello {
    extern const char kaa[];
    extern const char kbb[];                        
    extern const char kcc[];                        
    extern const char kdd[];       
    
    }

    .cpp中添加:

    namespace hello {
    const char kaa[] = "aa";
    const char kbb[] = "bb";
    const char kcc[] = "cc";
    const char kdd[] = "dd";
    
    }

    使用时直接添加.h文件即可使用

    方法2:通过添加extern使const全局变量强制外链接

    .cpp中定义时同时添加extern:

    extern const int g_nvalue = 9;

    使用它的.cpp中声明:

    extern const int g_nvalue;

    然后就可以使用了

    说明:只有.cpp没有.h的情况是c/c++代码的main.cpp文件

     

    错误情况(以vc/vs开发为例):

    在stdafx.h中添加

    int g_nvalue = 9;

     

    然后把它当做全局变量使用,没有使用的使用,编译能够正常编过,但是有任何位置使用它,不管使用的地方有没有加extern int g_nvalue,你会发现编译都会报错“重定义“,即使定义全局变量的地方加了防止头文件重复的宏,结果也是这样,因为公共头文件已经被很多文件包含了

    当然网上有人说在声明的地方改为extern int g_nvalue=9,使用的地方不使用#include包含头文件,只加入extern int g_nvalue,但是这样公共头文件中其他内容就使用不了了,所以也不行

     

    任务例子:

    已知一个main.cpp中定义了如下,并且该main.cpp没有头文件:

    HINSTANCE g_hInstance;
    const char kExit[] = "exit";

    现在另一个工程要使用这个main.cpp中的这两个变量,如何实现?

    答案:

    第一步:把main.cpp添加到工程中

    第二步:...(自行解决哈哈)

     

    2.static全局变量

    static全局变量的作用域是定义的源文件,只被初始化一次,使用格式如下:

    在使用的.cpp文件中加入:

     

    static int g_snValue = 9;


    由于它只定义的文件中起作用,所以使用也只能在定义的.cpp文件中

     

     

    错误情况:

     

    a.h中
    static int g_snValue = 9;

     

    a.cpp中
    #include "a.h"
    void fun()
    {
         g_snValue = 8;
         cout <<&g_snValue << " " <<g_snValue <<endl;
    }

     

    b.cpp中
    #include "a.h"
    void fun2()
    {
       cout <<&g_snValue << " " <<g_snValue <<endl;
    }

     

    int _tmain(int argc, _TCHAR* argv[])
    {
    	fun();
            fun2();
    	system("pause");
    	return 0;
    }


     

     

     

    输出结果不一样,原因:static全局变量定义在.h中,通过.cpp访问的是该值的拷贝,即会单独分配一块内存,并将该值拷贝一份,.cpp中所做的任何更改都不会对原值造成任何影响,所以static全局变量一般定义在.cpp中,防止造成信息污染,任何外部想访问值的内容,可以通过在.h中添加新的函数,获取.cpp的静态值的内容即可


    3.全局常量
    1)const单独使用时,其特性与static一样(每个编译单元中地址都不一样,不过因为是常量,也不能修改,所以就没有多大关系)

    2)在c++中const默认是内链接,即在全局内定义的const全局变量默认是内链接,作用域在本文件,并不是全局可见的,即局部变量

     
    展开全文
  • 全局变量,就像不可控的孩子,你放心你的孩子总是消失你的视野范围内吗? ...但是如果是全局常量,则问题不大,反正变来变去,还是同一个东西。 Thrift支持全局常量 Thrift中的常量,其实就是模...
    全局变量,就像不可控的孩子,你放心你的孩子总是消失你的视野范围内吗?

    为啥有全局变量

    通常来说,『全局变量』被视为一种不好的编程风格,因为它实在是不可控,怕它的状态不知道在什么时候就被改变了,根源就是『人们害怕未知』。但是如果是全局常量,则问题不大,反正变来变去,还是同一个东西。

    Thrift支持全局常量

    Thrift中的常量,其实就是模块级别的常量,语法上,自然是简单得不得了:

    // 普通基础类型
    const i32 INT32CONSTANT = 9853
    
    // 复杂容器类型
    const map<string,string> MAPCONSTANT = {'hello':'world', 'goodnight':'moon'};
    const set<string> NAMES = {"name1", "name2"};
    const list<string> NAMES_LIST = ["name1", "name2"];

    全局常量有啥用?

    如同你使用其他编程语言一样,全局常量在它们里面有啥用,那么在Thrift中就有啥用。比如我有一个需求,需要为系统的每个端口起一个名字,以统一规范,统一给每个微服务系统使用。那么我们就可以:

    const  map<string, i64>  PORTNAME_PORT = {
        "MYSQL_PORT": 8806,
        "REDIS_PORT": 7379,
    };

    不过,总体而言,『全局XX』带来了方便,也带来了问题,没有什么事情是非得使用『全局』去解决的,所以总体上不是 非常推荐的风格。

    展开全文
  • I 全局常量 一. 宏和全局变量的优缺点 宏的优点 在程序运行中的值永远是固定的,保证了数据的安全 全局变量的优点 不会产生很多临时的空间,所有用到的地方都访问的统一个变量 宏的缺点 宏是直接替换的,它会产生许多个...

    文章来源:https://www.cnblogs.com/KrystalNa/p/4806015.html

    I 全局常量

    一. 宏和全局变量的优缺点
    宏的优点
    在程序运行中的值永远是固定的,保证了数据的安全
    全局变量的优点
    不会产生很多临时的空间,所有用到的地方都访问的统一个变量
    宏的缺点
    宏是直接替换的,它会产生许多个临时的存储空间来存储需要替换的部分,这样会浪费内存,没有必要
    全局变量的缺点
    在程序运行中可能被修改
    二. 全局常量 - const关键字

    1. const的特点
      在编译阶段就要确定值是多少
      综合了宏和全局变量的优点
      被const修饰的变量会变成常量
      const写在类型前还是类型后都一样
      int const age = 20
      const int age = 20
      因为const修饰右边,所以右边是哪个变量名字就修饰哪个变量
    2. const和指针
      const只修饰右边内容,被const修饰的内容就是常量
      右边是什么,就是常量
      int * const p1;// p1是常量,*p1是变量
      int const * p2;// *p2是常量, p2是变量
      const int * p3;// *p3是常量,p3是变量
      const int * const p4;//p4是常量,*p4是常量
      int const * const p5;//p5是常量,*p5是常量
    3. const和指针的应用
      以后写常量就用const粘着变量名
      const int age = 20;
      const int *p = &age; //int *p = &age;
      *p = 30;// 因为age是常量,间接通过指针也不能修改age,是绝对安全的
      注意 为了避免这种情况应该使用const int *p = &age;
      三. const和宏的选用
      const是在编译阶段就要确定值是多少
      需要执行某些方法的情况就不能用const,比如全局颜色定义宏
      #define LNColorBg [UIColor redColor]
      //需要调用UIColor这个类才能设置颜色
      //而const是在编译阶段就已经确定了的,如果使用const来定义会报错

    II 全局变量

    全局变量要写在函数,方法的外面
    一.全局变量的作用域
    全局变量默认是全世界都能访问的
    二.extern
    利用extern,可以引用一个全局变量,可以在任何文件中访问这个全局变量,也能够修改
    注意 全局变量的名字如果重复的话,会出现访问混乱,报重复定义的错误,所以全局变量的名字不能重复
    补充:函数
    默认函数也是能全世界都能访问的
    只要利用extern引用一下就可以了,也不允许函数名重复
    三.static,const和extern总结

    1. static
      被static修饰的全局变量,作用域仅限于当前文件
      作用域改变(由全世界都能访问变为只在当前文件下才能访问)
      生命周期不变(整个程序运行过程中只占一份内存且都不会被销毁)
      被static修饰的局部变量,只会占用一块内存,在整个程序运行过程中都不会销毁,只会初始化一次
      作用域不变(原来在什么作用域中还在什么作用域中)
      生命周期改变(生命周期变长)
    2. const
      const值修饰它右边的内容,被const修饰的内容都是常量,都不能再修改
    3. extern
      可以用来引用一个全局变量\常量
      四.应用全局常量–Const.h/.m
      全局常量的写法
      仅限于本文件访问
      在本文件中写下面的代码
      static 类型 const 常量名 = 常量值;
      全世界都访问
      在LNConst.m文件中
      import <UIKit/UIKit.h>
      类型 const 常量名 = 常量值;
      在LNConst.m文件中
      import <UIKit/UIKit.h>
      UIKIT_EXTERN 类型 const 常量名;
      在pch文件中包含LNConst.h
      注意 定义结构体(如CGRect)的时候想用全
    展开全文
  • CI框架 设置全局常量、全局变量

    千次阅读 2019-02-02 09:47:49
    全局常量 /application/config/constants.php //定义图片存储地址 defined('ZLMM_SOURCE_PATH') OR define('ZLMM_SOURCE_PATH', 'E:/php/WWW/'); defined('ZLMM_SOURCE_PATH_URL') OR define('ZLMM_SOURCE_PATH...
  • 最近案子要用到C#,就摸索了一下C#,发现网上很多关于C#全局变量的定义和应用,基本都是雾里看花,水中望月,简单带过,让人摸不透,解决不了的问题。 作为一个过来人,本着复杂问题简单化,简单问题合理化的目的,...
  • 全局常量: public static final 常量名(string a)全局变量: public static 变量名(string a)属性:(属于某个类或对象) private String a interface里可以定义属性吗? 本质上不可以。如果强行在interface...
  • swift 全局常量 && 全局变量的写法

    千次阅读 2019-07-03 07:14:19
    在OC里面 如果 想设置一个全局常量 很简单 使用简单宏定义 就搞定了 例如: #define WEBAPIBASEURL @"http://www.baidu.com/" 或者 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width 写在一个.h...
  • PEI只有全局常量,没有全局变量 因为 PEI 阶段BIOS在ROM上执行, 数据段在ROM上,无法改变,所以只能是全局常量,如果声明一个全局变量,在程序中是无法给这个变量赋值的。 静态变量同样。 局部变量因为存储在...
  • <?php $global_var = "var"; define('global_const', 'const'); class Test { ... // 全局常量可以直接用 public $_const = global_const; // 但全局常量不能用来运算 //publi...
  • 全局变量在多文件中声明的一种可能的方法是 在.h文件中声明#ifdef GLOBALS bool m_debug = false; int m_selectedPerson = -1; int m_numPersons = 0; int m_gui_faces_left = -1; int m_gui_faces_top = -1; std...
  • I am trying to develop micro service by using spring and spring boot. In my project , I am converting monolithic to service oriented architecture. Project contain 20 Micro services.I these I need to s...
  • VC++中关于全局量的定义有两种比较好的方法。第一种新建一个Generic Class类,如CGlobals。会产生一个Globals.h头文件和一个Globals.cpp文件,在ClassView中会产生一个 CGlobals类。由于主要目的是利用产生的.h和....
  • 全局变量

    千次阅读 2019-05-09 22:06:51
    定义在函数内部的变量叫做局部变量,定义在函数外部的变量叫做全局变量。局部变量只能在该函数内部才能使用,而全局变量可以被整个C语言中所有的函数所公用,他的作用范围是从定义的位置开始一直到整个C语言程序结束...
  • Vue.js 如何添加全局常量变量? 这是最近一个同事问的问题,发现很多朋友对这块不熟悉,所以下面这篇文章主要给大家介绍了关于Vue中定义全局变量与常量的各种方式,需要的朋友可以参考借鉴,下面来一起看看吧。
  • Python 全局变量与global关键字

    万次阅读 多人点赞 2017-07-25 19:34:39
    Python 全局变量之谜​ 在Python的变量使用中,经常会遇到这样的错误:local variable 'a' referenced before assignment它的意思是:局部变量“a”在赋值前就被引用了。
  • 实现全局常量变量

    2016-06-29 11:49:19
    1.宏,不要使用,它只是一个预处理命令,可以重复定义的#define name @"string" #define name @"aaa"Xcode会出现...全局常量在@implementation外定义NSString * const str = @"string1";3.全局变量(1).extern (2).stat
  • python中全局变量与局部变量

    万次阅读 多人点赞 2019-03-01 15:27:17
    python中全局变量与局部变量 标签: python 局部变量就是定义在一个函数体内部的变量 全局变量是定义在外面的变量 比如: a = 1 def f(): b = 2 其中a就是全局变量,而b是局部变量。局部变量只在函数体内部...
  • VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量...
  • 全局变量 静态变量
  • matlab:使用全局变量

    万次阅读 多人点赞 2017-04-20 13:41:55
    简介全局变量(global variable)是变量的一种类型,区别于局部变量。若将一个变量声明为全局变量,则它所占的内存为全局内存,而不是本地工作区内存。因此全局变量就可以被所有工作区访问,修改。实例理解在函数间...
  • 直接用字符串常量要比利用全局变量快,但创建正则表达式就比起用全局变量要慢上很多了。
  • 1.在函数内部创建的变量对函数来...3.函数内部使用的变量声明为全局变量时,其名称要与全局变量的名称一致,在这样的情况下,我们就可以在函数中使用函数外部的全局变量了,这样就可以避免上一种因为函数内部的变量与外
  • JVM 中的静态变量全局常量.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,212,766
精华内容 485,106
关键字:

全局常量