2024年10月static声明函数(在C语言中可以用static声明一个函数,而C++中没有用static声明一个函数方法对吗)

 更新时间:2024-10-12

  ⑴static声明函数(在C语言中可以用static声明一个函数,而C++中没有用static声明一个函数方法对吗

  ⑵在C语言中可以用static声明一个函数,而C++中没有用static声明一个函数方法对吗

  ⑶c是c++的悉启简一部分,所以用c写的就是c++.static可用于函数,static也可用于函数里的变量。下面是c++程序例子。去旁悉掉前行睁裤头文件就是c#include《iostream》usingnamespacestd;#include《stdio.h》voidf(){staticv=;printf(“%d:“,++v);puts(“mainf“);}staticvoidsf(){puts(“mainsf“);}voidm(){f();sf();}intmain(){m();m();return;}程序输出::mainfmainsf:mainfmainsf

  ⑷static这个函数

  ⑸static是C中很常用的修饰符,它被用来控制变量的存储方式和可见性static声明的变量在C语言中有两方面的特征:)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。)、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。、问题:Static的理解关于static变量,请选择下面所有说法正确的内容:A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;D、静态全局变量过大,可那会导致堆栈溢出。答案与分析:对于A,B:根据本篇概述部分的说明b),我们知道,A,B都是正确的。对于C:根据本篇概述部分的说明a),我们知道,C是正确的(所谓的函数重入问题,下面会详细阐述。对于D:静态变量放在程序的全局数据区,而不是在堆栈中分配,所以不可能导致堆栈溢出,D是错误的。因此,答案是A、B、C。、问题:不可重入函数曾经设计过如下一个函数,在代码检视的时候被提醒有bug,因为这个函数是不可重入的,为什么?unsignedintsum_int(unsignedintbase){unsignedintindex;staticunsignedintsum=;//注意,是static类型的。for(index=;index《=base;index++){sum+=index;}returnsum;}答案与分析:所谓的函数是可重入的(也可以说是可预测的,即:只要输入数据相同就应产生相同的输出。这个函数之所以是不可预测的,就是因为函数中使用了static变量,因为static变量的特征,这样的函数被称为:带“内部存储器”功能的的函数。因此如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量,这种函数中的static变量,使用原则是,能不用尽量不用。将上面的函数修改为可重入的函数很简单,只要将声明sum变量中的static关键字去掉,变量sum即变为一个auto类型的变量,函数即变为一个可重入的函数。当然,有些时候,在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

  ⑹类里用关键字“static“声明的函数有什么用呢

  ⑺表示静态函数,它为所有类共有的。调用该函数直斗让余接使用类名加上修饰符,如:Windowswin;Windows::W_SIZE();而不空滚是:win.W_SIZE();静态函数只能处理静态数据成员,不能处理非静态程序,如:classWindow{public:staticvoidW_SIZE();private:inta;staticints;};Window::W_SIZE(){a=;//错误滑李,不能处理非静态成员s=;//正确}

  ⑻static定义的函数,怎么使用

  ⑼在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。xdxa用static声明的方法是静态方法,在调用该方法时,不会升前陵将对象的引用传递给它,所以在static方法中不吵戚可访问非static的成员xdxaxdxa比如类Cls中定悔芹义了staticsfunc();xdxa那么调用的时候用类名而不是对象名来调用这个方法:Cls.sfunc();

  ⑽static的函数声明可以放在函数中吗

  ⑾可以。私有烂缓函数只有该类的成员变渗卜量或成员函数可以访问。在C语言中,也有“private函数”,它就是接下来要说的static函数,完成面向对象编程中private函数的功能。当你的程序中有很多个源文件的时候,你肯定会让某个源文件只提供一些外界需要的接口,其他的函数可能是为了实现这些接口而编写,这些其他的函数你可能并不希望被外界(非本源文件所看到,这时候就可以用static修饰这些“其他的函数”。所以static函数的作用域是本源文件,把它想象为面丛历穗向对象中的private函数就可以了。在函数声明中加上static的好处是:在多个文件链接时,static函数只是文件域内可见。

  ⑿static函数与普通函数有什么区别

  ⒀static是静态函数,可以是全局函数,而普通函数是局部函数。全局函数可以在其它模块中引用调用。作用域比普通函数大。全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误..静态函数有两种,类中的成员函数和你说的这种,就是全局的,静态的全局函数表示只能被当前“.cpp”文件所使用,当外部用extern关键字声明之后也是无法使用的,如果不是静态函数,外部只要用extren声明一次就可以调用这个函数了;.静态变量要分为种,a.类中的成员;b.函数中的静态变量;c.静态全局变量;静态全局变量和静态全局函数一样,只能被包含的“.cpp”文件调用,外部无法用extern声明并使用;类中的成员其实可以当作一个全局变量,不过它的特点是只能用在该类里面,它并不属于任何一个成员,而是属于整个类;static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝.在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在初始化:未经初始化的全局静态变量会被程序自动初始化为(自动对象的值是任意的,除非他被显示初始化作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。c语言中static的语义.static变量:).局部a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后,尽管该变量还继续存在,但不能使用它。b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予值。而对自动变量不赋初值,则其值是不定的。).全局全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局变量的作用域是整个源程序(多个源文件可以共同使用;而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。.static函数(也叫内部函数只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数static在c里面可以用来修饰变量,也可以用来修饰函数。先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不包含对,不要弄混。

  ⒁请教:函数static声明

  ⒂前者默认是extern,也就是其他源文件中都可以调用,当然前面还要有函数原型声明后者的意思的确是仅仅当前文件可用

  ⒃c++中static函数用法说明

  ⒄简单回忆了一下,大体就见过这么几种情形吧。

  ⒅上面代码未进行编译,大体就是表达意思的伪代码,领会即可。

  ⒆C语言中static函数的具体作用是什么

  ⒇C语言中static函数的具体作用是:

  ⒈C语言里面的静态函数和函数的区别是:

  ⒉静态static的被调用函数的声明和函数原型

  ⒊在主调函数中调用某函数之前应对该被调函数进行说明(声明,这与使用变量之前要先进行变量说明是一样的。在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值作相应的处理。其一般形式为:类型说明符被调函数名(类型形参,类型形参…);或为:类型说明符被调函数名(类型,类型…);括号内给出了形参的类型和形参名,或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。例main函数中对max函数的说明为:intmax(inta,intb);或写为:intmax(int,int);C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。)如果被调函数的返回值是整型或字符型时,可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。例.的主函数中未对函数s作说明而直接调用即属此种情形。)当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再作说明而直接调用。例如例.中,函数max的定义放在main函数之前,因此可在main函数中省去对max函数的函数说明intmax(inta,intb)。)如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。例如:charstr(inta);floatf(floatb);main(){……}charstr(inta){……}floatf(floatb){……}其中第一,二行对str函数和f函数预先作了说明。因此在以后各函数中无须对str和f函数再作说明就可直接调用。)对库函数的调用不需要再作说明,但必须把该函数的头文件用include命令包含在源文件前部。

您可能感兴趣的文章:

相关文章