精华内容
下载资源
问答
  • c语言中static 函数和普通函数的区别?

    万次阅读 多人点赞 2018-05-17 09:43:38
    2.static函数(也叫内部函数)只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数) static在c里面可以用来修饰变量,也可以用来修饰函数。 先看用来修饰变量的...

    转自:https://bbs.csdn.net/topics/350238100

    C程序一直由下列部分组成:
    1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;
    2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。
    3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。
    4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)。
    5)堆——动态存储分。

    在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
    1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
    2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
    3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

    好处:
    定义全局静态变量的好处:
    <1>不会被其他文件所访问,修改
    <2>其他文件中可以使用相同名字的变量,不会发生冲突。

    局部静态变量
    在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
    1)内存中的位置:静态存储区
    2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
    3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

    注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。
    当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。

    3. 静态函数
    在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
    函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
    定义静态函数的好处:
    <1> 其他文件中可以定义相同名字的函数,不会发生冲突
    <2> 静态函数不能被其他文件所用。 存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。 auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。
    关键字extern和static用来说明具有静态存储期的变量和函数。用static声明的局部变量具有静态存储持续期(static storage duration),或静态范围(static extent)。虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。静态局部对象在程序执行到该对象的声明处时被首次初始化。
    由于static变量的以上特性,可实现一些特定功能。
    1. 统计次数功能
    声明函数的一个局部变量,并设为static类型,作为一个计数器,这样函数每次被调用的时候就可以进行计数。这是统计函数被调用次数的最好的办法,因为这个变量是和函数息息相关的,而函数可能在多个不同的地方被调用,所以从调用者的角度来统计比较困难。
      C语言中使用静态函数的好处:
    静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
    关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
    c语言中static的语义1.static变量:1).局部a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。2).全局全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。2.static函数(也叫内部函数)只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数) static在c里面可以用来修饰变量,也可以用来修饰函数。 先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不包含对,不要弄混。


    展开全文
  • C语言中的static函数

    2019-10-11 17:46:20
    C语言是以文件文件为单位组织的,在...这里主要介绍static函数,是对今天的一个编译问题的总结。 学过C++ 应该都知道,类成员有三种类型:public,protected,private。其中private关键字表示该字段只能被该类的成员...

    C语言是以文件文件为单位组织的,在一个源程序的所有文件中,一个外部变量和函数只能在源程序中定义一次。由于不同文件中的不同函数和变量很多时候都会相互引用,因此出现了static和extern关键字。这里主要介绍static函数,是对今天的一个编译问题的总结。
    学过C++ 应该都知道,类成员有三种类型:public,protected,private。其中private关键字表示该字段只能被该类的成员函数访问,对类外不可见。c中的static关键字和这个意思差不多:凡是加了static关键字的函数,则它只对包含该static函数的文件是可见的,在文件外是不可见的。下面举一个例子说明一下。
    下面是main函数,它调用了hello函数打印字数组buf,位于文件test.c中。

    #include<stdio.h>
    #include<stdlib.h>
    #include<unistd.h>
    int main()
    {
           char  buf[] = "hello world!\n";
           hello(buf);                                                         
              
           return 0;
     }
    

    hello函数位于hello.c中

    #include<stdio.h>                                                           
    #include<stdlib.h>
     
    static void hello(char *buf)
    {     
            write(1,buf,sizeof buf);
    }    
    

    注意,其中的hello函数包含static关键字

    编译后

    gcc hello.c test.c -o test
    

    会出现下面的错误

    /tmp/ccU7gZiZ.o: In function `main':
    test.c:(.text+0x3f): undefined reference to `hello'
    collect2: error: ld returned 1 exit status
    

    表示找不到 hello 函数,然后我们试一下把hello函数改成非static类型的。重复上述过程就可以顺利生成目标代码运行。
    所以可以看到,包含static关键字的函数只在他所在的文件中是可见的,在其他文件中不可见,会导致找不到定义。

    展开全文
  • static变量和static函数

    千次阅读 2019-03-28 21:30:18
    1、static全局变量和普通的全局变量 static全局变量在定义该变量的当前...static局部变量存放在静态存储区,其只在当前函数中起作用,但是其生存周期是直到当前程序结束为止,而局部变量存在于栈中。 3、stati...

    1、static全局变量和普通的全局变量

    static全局变量在定义该变量的当前源文件内有效, 在同一源程序的其它源文件中不能使用它。而普通的全局变量在各个源文件中都是有效的(当一个源程序由多个源文件组成时)。

    2、static局部变量和普通的局部变量

    static局部变量存放在静态存储区,其只在当前函数中起作用,但是其生存周期是直到当前程序结束为止,而局部变量存在于栈中。

    3、static函数和普通函数

    static函数只在当前源文件中起作用,在其他文件中不起作用。普通函数则可在其他源文件中调用。

    C++中的static更复杂,详情见https://blog.csdn.net/lms1008611/article/details/81408236

    展开全文
  • c语言static函数声明和函数定义 都在.c文件 都要加static修饰

    c语言static函数声明和函数定义 都在.c文件 都要加static修饰

    展开全文
  • static函数的申明

    千次阅读 2017-06-27 14:42:07
    static 声明的变量在C语言中有两方面的特征:   1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。   2)、变量用static告知编译器...
  • (1.cpp) #include <stdio.h> #include "2.h" void main() { my();... printf("我是外边的的函数,我被调用了\n"); } 2.h头文件 void my(); 上面的非常好,没问题。 如果是s...
  • static函数与普通函数有什么区别

    千次阅读 2019-01-08 22:34:38
    static函数与普通函数的区别:  用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。  在函数的返回类型前...
  • c语言中static函数的用法

    千次阅读 2018-05-10 17:22:55
    static 修饰的变量/函数称为静态成员变量/函数
  • static函数局部变量的使用

    千次阅读 2018-09-04 17:28:20
    #include &lt;stdio.h&gt; #include &lt;stdint.h&gt; #include &lt;string.h&gt; #include &...void staticFun(void) ... static uint8_t data = 0;  data++;  data...
  • class A { static int si; static void sfunc(){cout&...类的static member不会存在每一个具体的class object之中,而是存放在全局变量区,不论一个class有多少个具体实例,static data都只有一个。 ...
  • C/C++_static函数与普通函数

    千次阅读 2015-08-10 16:33:43
    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是...
  • title: 为什么虚函数(virtual)不能是static函数 date: 2016-06-08 15:22:30 categories: C++ tags: - C++ - C简而言之,成员函数实例相关,静态函数类相关。虚函数,是一种特殊的成员函数,用来实现运行时...
  • 转载自:CSDN-悠悠红茶 作为函数,不管其是不是static的,在代码段中都只有一份。每次对函数的调用, 一般而言都是一条call指令(当然还要参数入栈等动作...理解为其他.c文件)中调用,而static函数只能在其所在的...
  • 于是我把swap函数修饰为static ,那么我的swap函数需要在头文件中声明吗? 没有C币了不好意思。。。 ``` /*sort.cpp*/ #include"sort.h" static void swap(int &a, int&b) { int t = a; a = b; b = t; } ...
  • 1. 静态static成员函数不同于非静态函数,它只属于类本身,而不属于每一个对象实例。静态函数随着类的加载而独立存在。与之相反的是非静态成员,他们当且仅当实例化对象之后才存在。也就是说,静态成员函数产生在前...
  • C语言中static函数的作用: C程序一直由下列部分组成:  1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;   2)初始化数据段(数据段)——在程序中所有...
  • static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。...
  • 友元函数 一个常规的成员函数声明描述了三件在逻辑上相互不同的事情 1. 该函数能访问类声明的私用部分 2. 该函数位于类的作用域之中 3. 该函数必须经由一个对象去激活(有一个this指针)   通过将函数声明为...
  • static 函数定义在头文件中有什么作用?学渣求教,static 不就是要限制作用域吗?
  • static函数与普通函数

    千次阅读 2013-09-10 10:47:30
    原文:static函数与普通函数 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也 是静态存储方式。这两者在存储方式上并无不同。这两者的区别...
  • 简介: C语言中的 static变量(全局和局部)、static函数总结 文章目录本博文的简述or解决问题?同步博文:static 变量:静态局部变量:静态全局变量:static 函数…..:内部函数(又称静态函数):外部函数:[案例]外部...
  • 内联函数和普通函数最大的区别在于内部的实现方面,当普通函数在被调用时,系统首先跳跃到该函数的入口地址,执行函数体,执行完成后,再返回到函数调用的地方,函数始终只有一个拷贝; 而内联函数则不需要进行一个...
  • 转自:http://blog.163.com/sunshine_linting/blog/static/44893323201191294825184/全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态...
  • 2.static函数(也叫内部函数)只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数) static在c里面可以用来修饰变量,也可以用来修饰函数。 先看用来修饰变量的...
  • static变量大致分为三种用法 1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.  2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用.  3. 用于类中的成员.表示这个...
  • 以下是对C语言中的static修饰函数进行了详细的分析介绍,需要的朋友可以过来参考下
  • c与c++ static函数的区别

    千次阅读 2012-07-02 11:13:09
    c与c++ static函数的区别 c与c++ static函数的区别 static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微...
  • 关于static函数能不能在其他文件中使用的问题 转载▼ 首先要肯定的是static函数是不能被其他文件直接调用的 但是我们为回答面试官的问题  可以用间接的方式 1. 通过函数指针的方式, 我们只要得到这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,654,021
精华内容 661,608
关键字:

static函数