c语言静态函数调用问题楼上只说对一半,这里能调用a和b两个函数确实是因为使用include把a.cpp和b.cpp加入到了main.cpp里面,使用include实际是把对应代码加到include的位置 。真正做项目没有这样做的,都是使用头文件的方式;
static修饰的函数和变量在别的文件是绝对不可见的,这是楼上错误的地方 , 即使使用extern声明函数导出,也不可以 , 编译时根本就不能通过,会报static类型错误 , 不能导出 。。。
在你原来文件结构上加入头文件:
//a.h
#include iostream
using namespace std;
void a();
//b.h
void b();
然后把main.cpp里面的2个include分别改成a.h和b.h,编译:gmain.cpp a.cpp b.cpp会发现报错误:
a.cpp: In function ‘void a()’:
a.cpp:3: error: ‘void a()’ was declared ‘extern’ and later ‘static’
a.h:3: error: previous declaration of ‘void a()’
这里就是因为a函数是static类型 , 不能导出,把static去掉这里就可以编译通过了 。。。。
这也是static其中一个用法
c静态局部变量和静态函数C是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计 , 还可以进行以继承和多态为特点的面向对象的程序设计 。以下是为大家分享的'c静态局部变量和静态函数范例,供大家参考借鉴,欢迎浏览!
在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存 。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效 。但有的时候我们需要在两次调用之间对变量的值进行保存 。通常的想法是定义一个全局变量来实现 。但是这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便 。静态局部变量正好可以解决这个问题 。静态局部变量保存在全局数据区 , 而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值 。该变量在全局数据区内分配内存;静态局部变量在程序执行到该对象的声明处时被首次初始化 , 即以后的函数调用不再进行初始化(这一点非常的重要);静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;它始终驻留在全局数据区,直到程序运行结束 。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;静态函数主要是用来访问静态成员,不能直接访问类的非静态成员;静态成员函数主要为了调用方便,不需要生成对象就能调用 。比如
复制代码 代码如下:
class X
{
public:
void MethodA();
static void MethodB();
}
此时MethodB可以直接调用,X::MethodB();
而MethodA必须在先生成类对象之后才能够被调用,X x; x.MethodA();
复制代码 代码如下:
//Example 3
#include
void fn();
void main() {
fn(); fn(); fn();
}
void fn() {
static int n=10; //仅在初次调用它的时候被初始化,第二次调用的时候这句话就被忽略
coutnendl;
n;
}
c语言中static的作用和用法static关键字不仅可以用来修饰变量,还可以用来修饰函数 。在使用 static 关键字修饰变量时,我们称此变量为静态变量 。静态变量的存储方式与全局变量一样,都是静态存储方式 。静态变量属于静态存储方式 , 属于静态存储方式的变量却不一定就是静态变量 。
在C语言中,static关键字的作用如下:
在修饰变量的时,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期 , 直到程序运行结束以后才释放 。
static修饰全局变量的时,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以 。
static修饰一个函数,则这个函数的只能在本文件中调用 , 不能被其他文件调用 。Static修饰的局部变量存放在全局数据区的静态变量区 。
C的static用法:
面向过程程序设计中的static和面向对象程序设计中的static 。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用 。
在类中,static可以用来修饰静态数据成员和静态成员方法 。
静态数据成员:
静态数据成员可以实现多个对象之间的数据共享 , 它是类的所有对象的共享成员,它在内存中只占一份空间 , 如果改变它的值 , 则各对象中这个数据成员的值都被改变 。
静态数据成员是在程序开始运行时被分配空间,到程序结束之后才释放,只要类中指定了静态数据成员 , 即使不定义对象,也会为静态数据成员分配空间 。
静态数据成员既可以通过对象名引用,也可以通过类名引用 。
静态成员函数:
静态成员函数和静态数据成员一样,他们都属于类的静态成员,而不是对象成员 。
非静态成员函数有this指针,而静态成员函数没有this指针 。
静态成员函数主要用来方位静态数据成员而不能访问非静态成员 。
C语言中static函数的具体作用是什么?C语言中static函数的具体作用是:
让一个变量长期有效c语言静态函数的运行,而不管其是在什么地方被申明 。
避免多个文件使用c语言静态函数的运行了相同的变量名而导致冲突 。
C语言里面的静态函数和函数的区别是:
静态函数是函数的一种c语言静态函数的运行,函数包括静态函数和非静态函数两种 。
静态函数是有static修饰的函数c语言静态函数的运行,如果没有c语言静态函数的运行,则为非静态函数(全局函数) 。
当整个程序只有一个C文件时,二者没有区别,当程序是由多个C文件组成时,二者的作用域,即可使用的范围不同 。
静态函数(带static的),只能在本文件中使用,无法跨文件,而非静态函数(不带static的),可以在任何一个文件中使用 。当在其它文件中使用时,需要做函数声明后再使用 。
【c语言静态函数的运行 c语言静态定义】c语言静态函数的运行的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言静态定义、c语言静态函数的运行的信息别忘了在本站进行查找喔 。
推荐阅读
- sqlserver查看数据库表数量,sql语句查看数据库中的表
- 500块的公路赛车游戏,公路赛车无限金币版下载
- vb.net屏幕 vbnet tooltip
- gis数据偏差,gis数据处理问题
- asp.net占用内存,aspnet
- html5js水果机,水果机平台
- go语言适合哪些引擎开发 go语言适用领域
- 包含asp.netmvcmasterpage的词条
- gis里dem高程数据生成等高线,gis高程点怎么生成等高线