遇到有函数名前有加static的函数,不太懂什么意思。上网查了一下,网上有两种说法.现复制整理了一下,有兴趣的可以看一下

说法一:

在函数的返回类型前加上关键字static,函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。定义静态函数的好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突
<2> 静态函数不能被其他文件所用。

存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。 auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。关键字extern和static用来说明具有静态存储期的变量和函数。用static声明的局部变量具有静态存储持续期(static storage duration),或静态范围(static extent)。虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域内。静态局部对象在程序执行到该对象的声明处时被首次初始化。
C语言中使用静态函数的好处:
      静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。 
      关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。 使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。 
c语言中static的语义

1.static变量:1).局部a.静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。2).全局全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。但是他们的作用域,非静态全局 变量的作用域是整个源程序(多个源文件可以共同使用); 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

2.static函数(也叫内部函数)只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用。区别于一般的非静态函数(外部函数)     static在c里面可以用来修饰变量,也可以用来修饰函数。先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不包含对,不要弄混。

说法二:

为什么不自己去实践呢?

在C里面,所谓 static ,只是限制在当前源文件————这个只是对于编译器/链接器而言。但实际上,运行时,static和普通的extern 的函数/变量,没有区别。

例如:使用函数指针/变量指针,完全可以访问其他文件的 static 变量/函数

file01.h
int * iptr01;
typedef void (* funcPtr)(void);
funcPtr pfun01;
----------------------------file01.c
#include "file01.h"
static int ivar01 = 36;
int * iptr01 = &ivar01;static void hwfun (void);
funcPtr pfun01 = &hwfun;void hwfun (void)
{
printf("hello world\n");
}
-------------------------file02.c
#include "file01.h"
............
//在某个代码内
*iptr01 = 72;
//file01.c 中的ivar01  变为72;
pfun01();
//调用了file01.c 中的hwfun ,打印出hello world

个人感觉说法二比较对,说法一也为我们普及了许多知识

关于函数名前加static的一些解释相关推荐

  1. 函数名前加static与不加static的区别

    函数名前有无static关键词修饰的区别 引入 static修饰特点 代码示例 代码1(对应第1点) 代码2(对应第2点) 代码3(对应第3点) 总结 引入 在定义函数时,前面有时会有static关键 ...

  2. 函数名前加static的作用

    static 先思考一个问题,static修饰一个变量的作用是什么? 它的名字叫做局部静态变量或者全局静态变量,那这个变量到底可以干什么? 它有一个作用就是为了让该变量只在自己的编译单元中可见.对于外 ...

  3. php 调用变量方法名,php中引用(变量和函数名前加符号)用法

    本文章来给大家介绍在php中我们常看到在在php变量前面加个&符号,这个就是php中引用符号了,它可以用于各种变量.函数.对象了下面我来给各位详细介绍php&符号用法.在 PHP 中引 ...

  4. 函数名前加::的缘由

    函数名前加::的缘由 在开发MFC之前,自己开发的是以AFx(ApplicationFrameworks,x是没有什么意义的)开头的一些函数.但是那个时候开发的函数并没有进行封装,但是有很多很有用的函 ...

  5. 调用函数时为什么要在函数名前加“(void)”

    我们知道,在定义函数时,加在函数名前的"void"表示该函数没有返回值.但在调用时,在函数名前加"(void)"的作用又是什么呢? 最明显的一点就是表示程序并不 ...

  6. 调用函数时在函数名前加“(void)”

    在定义函数时,加在函数名前的"void"表示该函数没有返回值.但在调用时,在函数名前加"(void)"的作用又是什么呢? 最明显的一点就是表示程序并不关心调用该 ...

  7. 函数名前加 符号的深入理解 C++

    #include <iostream>using namespace std;int& test_str() {int a = 1;return a; //通过返回 a 的地址来进 ...

  8. 在C++中,函数名前的const和函数名后的const的区别

    首先要知道函数名后面加const只能用于成员函数. int const func(); //合法,相当于const int func(); int func2() const; //非法,对函数的co ...

  9. C++ 函数名前的 '', 参数前的

    函数名前的 '&' 可以让你用 &函数名() 的方式获取返回值的地址 传参时候,参数para1 前面加&,在函数内改变para1 的值,函数外的para1 也会变,否则不变

最新文章

  1. jwt token长度限制_ASP.NET Core Web Api之JWT(一)
  2. python补全插件
  3. ways to talk with girls
  4. c语言绘制路面图形代码,道路纵断面绘图程序的开发.pdf
  5. C#开源类库推荐:拼多多开放平台SDK,开源免费,支持.NET Core!
  6. 计算机桌面上的声音图标没了怎么办,Win7电脑右下角声音图标不见了怎么办?...
  7. python面试题及答案2020_2020年python面试题汇总(最新)
  8. python math模块详解
  9. cmd操作 以及几个常用快捷键
  10. 网络抖动、丢音、卡顿
  11. python根据出生年份计算年龄_python根据出生日期计算年龄的代码详解
  12. 龙芯CPU处理器和芯片资料介绍
  13. Mysql eighth week
  14. hdwiki 数据库结构说明
  15. 计算机毕业设计选题建议
  16. 计算机教师培训感悟反思,教学工作反思感悟
  17. 计算机类英文自我介绍,优秀的计算机专业英文自我介绍
  18. 净值继续回落,短期弱势难改
  19. 征服多云管理的6种工具
  20. 高斯-克吕格投影与UTM投影

热门文章

  1. 【numpy】np.random.shuffle()
  2. 数据分析介绍及环境介绍
  3. sscanf c语言程序,C语言 sscanf用法详解
  4. 简单加减法(含负数)运算
  5. 黑盒测试(一)-----边界值测试
  6. SDK、JDK、JRE的区别
  7. python 进程池使用
  8. 数据分析-解读excel回归分析-2019/9/27
  9. Hudi async/inline compaction
  10. Win8系统安装教程【附Win8/64位系统下载地址】