精华内容
下载资源
问答
  • static函数

    2012-08-14 23:45:15
    static函数  (2008-07-10 15:05:19) 转载▼ 标签:  it 分类: c static修饰符是一个能够减少此类命名冲突的有用工具。例如,以下声明语句 static int a; 其含义与...

    static函数

     (2008-07-10 15:05:19)
    标签: 

    it

    分类: c

    static修饰符是一个能够减少此类命名冲突的有用工具。例如,以下声明语句

    static int a;

    其含义与下面的语句相同

    int a;

    只不过,a的作用域限制在一个源文件内,对于其他源文件,a是不可见的。因此,如果若干个函数需要共享一组外部对象,可以将这些函数放到一个源文件中,把它们需要用到的对象也都在同一个源文件中以static修饰符声明。

    static修饰符不仅适用于变量,也适用于函数。如果函数f需要调用另一个函数g,而且只有函数f需要调用函数g,我们可以把函数f与函数g都放到同一个源文件中,并且声明函数gstatic

    static int

    g(int x)

    {

     

    }

    void f() {

     

    b=g (a);

    }

    我们可以在多个源文件中定义同名的函数g,只要所有的函数g都被定义为static,或者仅仅只有其中一个函数g不是static o因此,为了避免可能出现的命名冲突,如果一个函数仅仅被同一个源文件中的其他函数调用,我们就应该声明该函数为static

     

    static函数

    在C语言编程中,static的一个作用是信息屏蔽!
    比方说,你自己定义了一个文件 -- 该文件中有一系列的函数以及变量的声明和定义!
    你希望该文件中的一些函数和变量只能被该文件中的函数使用,那么,你可以在该函数、变量的前面加上static,代表他们只能被当前文件中的函数使用!

    而在C++中,用static来作为信息屏蔽就显得没有必要了!因为,C++有了信息屏蔽的利器 -- class机制!

    类中的private属性的变量和函数就对外禁止访问!

    然后是C/C++通用的函数作用域的static型的变量!其目的,也是为了信息的屏蔽!
    int fun() {
       static int a = 1;
       a++;
    }
    在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1!

    以后每次进入该函数,a就不会被再次初始化了,仅进行自增1的操作!

    在static发明前,要达到同样的功能,则只能使用全局变量:

    int a = 1;

    int fun() {
       a++;
    }
    那么,a的值就有可能被其他函数所改变!

    最后,说说类中的static变量和函数。

    这种存储属性的变量和函数是同一种类的不同实例之间通信的桥梁!
    #include <iostream>
    using namespace std;

    class A {
    public:
        static int num;    //    统计创建了多少个实例
        A () {num++};    //    每创建一个实例,就让num自增1

        //    返回通过构造函数所创建过的A类实例的数目
        static int how_many_instance() {
            return num;
        }
    }

    static A::num = 0;    //    需要在类申明的外部单独初始化!

    int main() {
        cout << A::how_many_instance() << endl;
        A a, b, c, d;
        cout << A::how_many_instance() << endl;
        system("pause");

    展开全文
  • 在Iphone中,对于static函数在Class实体不存在的情况也可以被调用。 而非static函数,则一定要在有实体的情况下才可以被调用。如: <br />-(void) testDataCBTest:(NSString*)buff{ } ...

    在Iphone中,对于static函数在Class实体不存在的情况也可以被调用。

    而非static函数,则一定要在有实体的情况下才可以被调用。如:

    -(void) testDataCBTest:(NSString*)buff{

     

    因此,一般来说,对于Callback函数,一般都定义为static函数,而 @selector(func),其中func则为非static函数,否则,无法调用到相关接口函数。

     

    因此,对于@selector(func),func则为Class对应的非static函数,如果此函数定义在其他地方,则无法调用到,会出现错误。

    举例:

    在CNetworkUtil.m中调用

    CNetWorkTestAppDelegate *delegate = (CNetWorkTestAppDelegate *)socketMng[index].appInfo;

    [delegate performSelectorInBackground:@selector(TestThreadTest) withObject:nil];

    TestThreadTest需要定义在CNetWorkTestAppDelegate.m中,否则出现调用错误。
    展开全文
  • static函数与普通函数

    千次阅读 2013-09-10 10:47:30
    原文:static函数与普通函数 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也 是静态存储方式。这两者在存储方式上并无不同。这两者的区别...

    原文:http://blog.163.com/sunshine_linting/blog/static/44893323201191294825184/

    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也
    是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多
    个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文
    件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数
    公用, 因此可以避免在其它源文件中引起错误。

    static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
    static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
    static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

    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里面可分为存在全局数据区、栈和堆里。其实我们平
    时所说的堆栈是栈而不包含对,不要弄混。

    展开全文
  • static函数与普通函数的区别:  用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。  在函数的返回类型前...
    static函数与普通函数的区别:
      用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,也就是说,可以被其它代码文件调用该函数。
      在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。因此定义静态函数有以下好处:
      <1> 其他文件中可以定义相同名字的函数,不会发生冲突。
    

      <2> 静态函数不能被其他文件所用。

    static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
    静态函数
    C语言中使用静态函数的好处:
    静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
    关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。

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

    2017-07-14 19:13:07
    C/C++中static函数  将函数声明成static函数,那么这个函数只可以在所处的文件中被调用,不能被其他文件调用。而且声明成static函数以后,即使这个函数名和其他文件中的函数名一样,不会引起冲突,也不会引起...
  • 简介: C语言中的 static变量(全局和局部)、static函数总结 文章目录本博文的简述or解决问题?同步博文:static 变量:静态局部变量:静态全局变量:static 函数…..:内部函数(又称静态函数):外部函数:[案例]外部...
  • static函数与普通函数区别

    千次阅读 2014-05-04 19:42:26
    static函数与普通函数区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽...
  • static函数和普通函数区别 原创Isanti2015 最后发布于2017-08-21 20:05:50 阅读数 1288 收藏 展开 几者的区别从三个方面考虑: 1初始化时间 2 作用域 3 分配内存空间 static全局变量和普通全局变量区别: 区别:...
  • static变量和static函数

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

    千次阅读 2016-07-02 19:44:24
    C语言是以文件文件为单位组织的,在一个源程序...这里主要介绍static函数,是对今天的一个编译问题的总结。 学过C++ 应该都知道,类成员有三种类型:public,protected,private。其中private关键字表示该字段只能被
  • 当使用static函数来做一个窗口过程函数时,static函数可以通过编译,但是它本身无法访问类的成员函数和数据,如果我们能够得到类的指针并交给static函数处理则可以实现我们的要求。 技巧:为了确保非static窗口过程...
  • C中的static函数小结

    2013-09-11 20:17:09
    static函数可以定义在.h文件以及.c文件中 非static函数只能定义在.c文件中 (2)作用范围 static函数只能作用于本文件中,这里也要看情况,具体如下 1. 当static 函数定义在 .c 文件中,那么该static函数就只作用于...
  • title: 为什么虚函数(virtual)不能是static函数 date: 2016-06-08 15:22:30 categories: C++ tags: - C++ - C简而言之,成员函数实例相关,静态函数类相关。虚函数,是一种特殊的成员函数,用来实现运行时...
  • static 函数定义在头文件中有什么作用?学渣求教,static 不就是要限制作用域吗?
  • 因为其他函数并不能保证同样不修改类的成员变量 static函数在调用时没有this指针,所以应该只能使用static成员和函数。 普通函数在调用时会有this指针。http://blog.chinaunix.net/u3/103927/showart_2073
  • 简单总结一下C++中的各种特殊函数 1.static成员函数 定义在类体中,定义时在前面加static关键字...一般的成员函数都有隐含的this指针,但是static成员函数没有。 因为static成员函数不是任何对象的组成部分,所
  • static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。...
  • static 函数与普通函数有什么区别? 答案:全局变量( 外部变量) 的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无...
  • C++的Static函数

    2016-04-30 19:42:52
    static 成员函数不能声明为虚函数 static对象是共享的,类中的成员变量或成员函数一旦与static关键字相结合,则该成员变量或成员函数就是属于类的,而不是再是属于任何一个对象的,当然任何一个对象都可以共享该...
  • 转载自:CSDN-悠悠红茶 作为函数,不管其是不是static的,在代码段中都只有一份。每次对函数的调用, 一般而言都是一条call指令(当然还要参数入栈等动作...理解为其他.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. 通过函数指针的方式, 我们只要得到这个...
  • 如果在C++类声明了static数据成员和static函数,一定要在类的声明体外面定义static数据成员。可以在类的声明体内定义或者在声明体外定义static函数。在定义时,一定要将关键字"static"去掉,否则会有编译错误(为什么...
  • static变量 static函数

    千次阅读 2012-05-15 13:44:19
    下面讲一下static函数 主要参考: http://hi.baidu.com/pope123/blog/item/344407d5512953d450da4b6c.html 在平常的 C/C++ 开发中,几乎所有的人都已经习惯了把类和函数分离放置,一个 .h...
  • static 函数 不能为外部文件调用

    千次阅读 2009-11-26 20:01:00
    测试 static 函数 的调用结果: 编译错误:error C2129: static function void __cdecl funcStatic(void) declared but not defined分析: 禁止外部文件调用 static 函数,仅仅 源文件中的函数可以调用static函数。...
  • C++ static函数 继承问题

    千次阅读 2010-12-09 18:43:00
    今天在论坛上看了些关于 C++中static函数 继承的问题,顺便弄个小程序试了试。。 #include <iostream><br /> using namespace std; <br /> class base { public:  static int ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,782
精华内容 27,912
关键字:

static函数