精华内容
下载资源
问答
  • 等效于每个引用该头文件的源文件中,定义一个变量名为var, 类型为TYPE静态全局变量。每个文件中var变量均归属于本源文件,各文件中互不相同。 作用域为引用头文件源文件范围内。 2 头文件中定义变量,...

    根据头文件中变量的定义形式,作用范围有所不同,有如下几种情况:

    1

    在头文件中定义静态变量,如

    static TYPE var = init_value;

    其中dao= init_value部分可以省略。

    等效于在每个引用该头文件的源文件中,定义一个变量名为var, 类型为TYPE的静态全局变量。每个文件中的var变量均归属于本源文件,各文件中的互不相同。

    作用域为引用头文件的源文件范围内。

    2

    在头文件中定义变量,但是不带初始化值。

    TYPE var;

    这种情况下,相当于定义了一个全局变量var, 同时在所有引用该头文件的源文件中声明。

    其作用域为整个项目的所有源文件。

    在引用了该头文件的源文件中可以直接使用var, 在没有引用该头文件的源文件中,可以通过

    extern TYPE var;

    进行声明,从而使用var。

    3
    在头文件中定义了带初始化值的变量。

    TYPE var = init_value;

    当项目中,只有一个源文件中引用了该头文件时,等同于在源文件中定义了这个全局变量,可在该文件中使用var。 在其它源文件中可以通过

    extern TYPE var;

    进行声明,从而使用var。所以这种情况下变量的作用域也是整个项目。

    需要注意的是,这种形式一旦在超过一个源文件中引用该头文件,则会按照在不同文件中定义同名全局变量处理,这时会编译出错,自然也就没有作用域的说法了。

    展开全文
  • 本博客仅记录自己代码...例如程序包含两个源文件,两个源文件中都要用到同一个外部变量a,做法任意一个源文件中定义外部变量a,而另一文件中用extern对a作“外部变量申明”,即“extern a”。 文件file1.c

    本博客仅记录自己在代码中,多个源文件共享或限制全局变量、函数作用域的常用用法。

    扩展全局变量、函数作用域

    1. 多个源文件使用其中一个源文件的外部变量
    外部变量是在函数外部定义的全局变量,它的作用域从定义开始,到本程序文件的末尾。有时候希望若干个程序文件都可以使用该外部变量,会用extern扩展其作用域。

    例如程序包含两个源文件,在两个源文件中都要用到同一个外部变量a,做法为:在任意一个源文件中定义外部变量a,而在另一文件中用extern对a作“外部变量申明”,即“extern a”。

    文件file1.c

    #include <stdio.h>
    int a = 1; //定义外部变量
    int fun1()
    {
      printf("%d",a);
      return 0;
    }
    

    文件file2.c

    #include <stdio.h>
    extern int a; // 扩展作用域到本文件
    int fun2()
    {
      printf("%d",2*a);
      return 0;
    }
    

    在C语言和C++混编的情况下,如果cpp源文件需要使用c文件中的全局变量,还需要在cpp文件中使用extern "C"关键字,否则编译不成功:

    文件file3.cpp

    #include <stdio.h>
    extern "C"
    {
      extern int a;
    }
    int main()
    {
    	printf("%d",3*a);
    	return 0;
    }    
    

    2. 多个源文件使用其中一个源文件的函数
    有多种方法,我常用的方法是:

    Step1: 在file1.c中定义该函数

    文件file1.c

    #include <stdio.h>
    int a = 1; //定义外部变量
    int fun1()
    {
      printf("%d",a);
      return 0;
    }
    

    Step2: 创建file1.h文件,加入int fun1();声明

    文件file1.h

    int fun1();
    

    Step3: 在file2.c中引用该头文件#include “file1.h”,即可调用该函数。

    文件file2.c

    #include "file1.h"
    int main()
    {
      fun1();
      return 0;
    }
    

    限制全局变量、函数作用域

    只需要在前加static修饰即可:

    文件file2.c

    #include<stdio.h>
    static int a = 1; //定义外部变量
    static int fun1()
    {
      printf("%d",a);
      return 0;
    }
    
    展开全文
  • 1,函数外部定义的变量为全局变量 2,有效区域是从定义开始,到源文件结束 3,全局变量依然有定义屏蔽 4,结构化程序设计尽量不用全局变量作用域: 程序段区域,c程序名字都有唯一的实体对应...
    局部变量:
    1,只能定义在他的区域或者语句中;
    2,同一区域不能定义同一名变量
    3,在变量所处区域的子区域重新定义同一变量,则大区域的变量被屏蔽
    全局变量:
    1,在函数外部定义的变量为全局变量
    2,有效区域是从定义开始,到源文件结束
    3,全局变量依然有定义屏蔽
    4,结构化程序设计尽量不用全局变量;
    作用域:
    程序中的一段区域,c程序中每个名字都有唯一的实体对应;


    全局作用域:文件作用域:从文件第一行到文件结束的区域
    局部作用域:
    函数作用域:从函数投开始到函数结束;
    块作用域:由复合语句的大括号{}界定的区域
    类型声明作用域:在结构体,共用体声明的大括号
    函数原型作用域:形参列表所处的作用域;


    多文件的作用域:
    作用域规则:
    1,同一个作用域不允许有相同名字的实体
    2,实体包含它的作用域内,从定义或声明的位置开始,按文件的顺序往后直到作用域结束均是可见的;
    3,可屏蔽大区域的实体,若自区域有同名实体;
    4,可使用extern声明将变量或者函数实体的可见区域前伸,成为前置声明
    5,变量或者函数实体使用 static修饰,则实体对于其他源文件是不可见的;


    extern 不能给变量赋初值 作用是将全局变量前伸到定义处


    int a=1,b=2;//全局变量
    int c=10,d=11;//全局变量
    void f1(int n,int m)
    {
    int x=21,y=22,z=23;
    extern int h,k;//到此刻下面定义的h,k就可用了
    n=n+t;
    if(n>100)
    {
    int x=31,t=20;
    n=x+y;
    }
    if(m>10){
    int y=41;
    n=x+y;
    }
    }






    }
    全局变量在不同文件中不能同名,也不能有相同的函数,因为连接会出错。
    全局变量可以用在不同文件中;


    不同文件的对象冲突
    用static将对象设计成文件的”私有“;
    不同的对象共享:

    用extern把对象声明延伸



    c源程序编译连接后成为二进制的可执行文件成为程序映像
    elf文件格式:
    内存从高到低:
    命令行数据环境变量
    自由空间{
    栈 (向低内存地址生长)存放c程序中所有局部的非晶态型变量,临时变量,形参和函数返回值
    运行时不会分配栈,只有调用函数时,才会分配
    函数结束释放栈,如果不初始化,变量值是随机的;
    堆(向高内存地址生长):  存放c程序中的动态分配的存储空间
    可以通过对动态内存的申请,来分配堆,释放堆。
    堆由程序员制定分配的大小,释放和分配时间;


    }


    静态空间{
    未初始化数据段(未初始化的全局和静态变量,运行前数值全是初始化为0)
    已初始化数据段(编译时已经确定了初值,运行时,没有初始化的动作)
    代码段 全局常量(const)字符串常量,。。。
    }






    生命期:
    对象是内存中具有类型的存储区
    动态存储:系统为对象动态的分配存储空间;
    static 返回类型 函数名(){
    static  类型 变量名=初值;//这条语句在编译时已经完成赋值,所以运行时不会再运行这一条;


    }
    静态局部变量生命周期是整个运行时期
    全局变量本来就是static的,


    被调函数的代码嵌入到主调函数中
    inline  返回类型  函数名()
    {}
    或者在函数原型声明时加入inline
    注意:内联的声明必须在调用之前


    会增加目标代码量,内联函数以目标代码的增加换取运行时间的节省
    内联函数不允许用循环语句和switch语句
    递归函数也不能用做内联函数,无法嵌入时,会忽略inline声明
    应用在规模小,语句不多,语句简单而且频繁被调用。






    递归算法:
    Hanoi塔的问题
    (1)分解为简单的问题
    分别送一块两块开始
    分治法:
    基本原理:将一个规模为n的问题分解为k(1<k<n)个规模的问题
    1,分解
    2,解决
    3,合并
    例:整数划分问题




    展开全文
  • 那么定义的变量只在当前引用它头文件的源文件中生效,各个引用它头文件的源文件使用相关独立,不存在交集。 即:如果在一个头文件中声明: static intg_num= 100;那么会每个包含该头文件的cpp都创建一个全局变量...

    只说关于在头文件中的使用:

     

    1、static定义变量假如放在头文件中:

    eg: static int g_num = 100;

    那么定义的变量只在当前引用它头文件的源文件中生效,各个引用它头文件的源文件使用相关独立,不存在交集。

    即:如果在一个头文件中声明: 
    static int  g_num= 100; 
    那么会为每个包含该头文件的cpp都创建一个全局变量,但他们都是独立的.

    但是这种方法不常用,也不推荐。因为这样写意味着保护该头文件的所有源文件都包含了一个同名但不同作用域的变量,使用不明确,是的当前对该变量分配了内存,但是有可能不使用。

     

    2、如果想让多个源文件同时使用一个变量,那么就用到了extern 关键字

    eg: extern int g_sum;

    用法:在头文件中像上面一样声明,然后在任意一个包含它的源文件中定义既可: 

    eg:int g_sum = 100;其他包含此头文件的都可以共享一个全局变量。

    参考blog:

    https://blog.csdn.net/qq_17368865/article/details/79110149

    https://www.cnblogs.com/zplutor/archive/2011/08/06/2129401.html

    展开全文
  • 使用static修饰头文件中修饰的变量,此时不会产生冲突(用static修饰的全局变量的作用域为定义的源文件),个源文件中引用该头文件,等于是每个源文件中都定义了该变量次,而且此变量仅本源文件中有效,...
  • 静态全局变量和非静态全局变量的区别 全局变量的说明之前再加以static 就构成了静态的全局变量。...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用,因此可以避免其它
  • 全局变量、局部变量、静态全局变量、静态局部变量的区别...全局变量只需在一个源文件中定义,就可以作用于所有的源文件。它的作用域为变量的定义处开始,到本程序文件的末尾。当然,其他不包含全局变量定义的源文件需
  • 如果同一个源文件中全局变量与局部变量同名,则局部变量的作用范围内,全局变量被“屏蔽”, 即它不起作用。 如果写文件的开头,可以省略extern。 静态存储区分配存储空间 #include<stdio.h> #...
  • static变量与全局、局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用,
  • 静态全局变量和全局变量的区别: 全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。 全局变量本身就是静态存储方式, 静态...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函.
  • 01 啥是全局变量 说起全局变量,就不得不提到“全局变量,局部变量,静态全局变量,静态局部变量”,这些都是...全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要
  • 由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用,因此可以避免其它源文件中引起错误。 static全局变量只初使化一次,防止其他文件单元中被引用。 3、局部变量: 存储区是栈区,离开...
  • 全局变量(外部变量)的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量各个...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用, 因此可以避免其它源文件中引起
  • 全局变量和静态全局变量的区别   全局变量本身就是静态存储方式, 静态全局变量当然也是...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用,因此可以避免其它源文
  • 其实就等效于每个引用该头文件的源文件中,定义一个变量名为x整型静态全局变量,每个文件中x变量均属于本源文件,各文件中互不相同,作用域为引用头文件源文件范围内 2、头文件.h中定义变量,但是不初始化...
  • Static全局变量与普通的全局变量有什么区别? 答:  全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,... 由于静态全局变量的作用域限于一个源文件内,只能
  • 1.这两者的区别虽在于非静态全局 变量的作用域是整个源程序, 当...2.由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用, 因此 可以避免其它源文件中引起错误。 3.全局变量(外部变量)的说明
  • 普通全局变量前面加上...由于静态全局变量的作用域限于一个源文件内,只能该源文件内的函数公用, 因此可以避免其它源文件中引起错误。static全局变量与普通全局变量区别 static全局变量只初始化一次,不能别其
  • 全局变量(外部变量)的说明之前冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用,因此可以避免其它源文件中引起
  • golang if 声明变量作用域

    千次阅读 2019-06-22 15:03:27
    变量作用域变量定义if 和 for 声明变量作用域if 和 for 这些控制结构,而这些结构声明的变量的作用域相应的代码块内。 一个变量(常量、类型或函数)程序中都有一定的作用范围,称之作用域。如果一个...
  • 全局的static变量

    2015-11-03 19:30:35
    全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者存储方式上并无不同。 这两者的区别在于非静态全局变量的作用域是...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内
  • static定义的变量

    千次阅读 2019-01-08 11:01:57
    static全局变量与普通全局变量的区别 static全局变量和普通全局变量的存储方式没有不同,如果它们都已经初始化,那么存放进程的数据...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用...
  •  全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, ...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用, 因此可以避免其它源文件
  • 几者的区别重三个方面考虑: ... 2.static全局变量限定了作用范围,仅在定义该变量的源文件中有效,由于静态全局变量的作用域局限于一个源文件内,即文件作用域,只能该源文件内的函数公用, 因此可以避免
  • 静态变量和全局变量

    2010-11-25 10:39:00
    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, ...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用, 因此可以避免其它源文件中引起
  • 全局变量、静态全局变量和静态局部变量都存放内存的静态存储区域 这两者存储方式上并无不同。 这两者的区别虽在于非静态全局变量的作用域...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数
  • 由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数公用, 因此可以避免其它源文件中引起错误。 static变量和普通变量的区别: static全局变量与普通全局变量区别:static全局变量只初使化一次...
  • 静态全局变量

    2010-07-09 22:22:00
    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式,静态全局变量当然也是静态...由于静态全局变量的作用域局限于一个源文件内,只能该源文件内的函数
  •  其次,搞清楚全局变量,局部变量的概念,作用域,以及它们所在的存储位置。  全局变量函数外部定义的变量,也称为外部变量。全局变量都是静态的,但是静态全局变量全局变量有一点差别(静态全局变量只初始...

空空如也

空空如也

1 2 3 4 5
收藏数 97
精华内容 38
关键字:

在一个源文件中定义的全局变量的作用域为