转载

在C语言中为什么要用静态函数(static function)?
如果不用这个static关键字,好象没有关系。那么,用了static以后,有什么作用呢?

我们知道,用了static的变量,叫做静态变量,其意义是 ,该变量的值在下次调用时,还继续保留前次调用时的值。
这里在一个函数前加上static关键字,其意思是这样的:
原来static函数是“restrict visibility of the function”, 即该函数的作用域在另一个文件中是不可见的。
在C++中,函数的作用域一般是局限于其所定义的类中,虽静态函数不常见。在C++,“a static member (function)is part of its class but not part of any object”。

举例来说:
文件file1.c:

void func1( void )
{
}

extern void func2( void )
{
}

static void func3( void )
{
}

文件file2.c:

void func1( void );
void func2( void );
void func3( void );

int main( void )
{

func1(); 
  func2(); 
  func3(); 
  return 0;
}

在Cygwin下(或Linux下)用GCC编译:
  $ gcc file1.c file2.c
。。。 file2.c:(.text+0x35): undefined reference to `_func3'
这个错误信息表示func3没有定义,即它在file2.c中不可见。

C语言中的静态函数的作用相关推荐

  1. C语言中static的作用及C语言中使用静态函数有何好处

    转自:http://www.jb51.net/article/74830.htm 在C语言中,static的作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0. 在C语言中,static ...

  2. C语言中双感叹号的作用

    1.C语言中双感叹号的作用 (1)感叹号的作用:感叹号是逻辑运算符,表示逻辑非,也就是把真变成假,把假变成真: (2)在C语言中,0值表示假,非0值都是真,所以感叹号会把非0值变成0,而把0值变成1: ...

  3. c语言中预处理指令的作用,C语言中常用预处理指令

    转载自 https://blog.csdn.net/farsight2009/article/details/58602886 姓名:张艳博 学号:17021223249 [嵌牛导读]: C语言中常用 ...

  4. c语言中常量有何作用,正确的C语言常量是什么?

    C语言的常量有整数常量,实型常量,字符常量,符号常量等. 1.整数常量 整数常量是指直接实用的整形常数,又称整形常数或者整数,例如,1,-9等.整数常量可以是长整形.短整型.符号整型和无符号整型. a ...

  5. c语言中的除号什么作用,c语言中除号用什么表示

    前言继承是OOP设计中的重要概念.在C++语言中,派生类继承基类有三种继承方式:私有继承(private).保护继承(protected)和公有继承(public).一.继承规则继承是C++中的重要特 ...

  6. c语言中函数声明的作用

    在c语言中函数声明不是必须的,即使没有声明函数,gcc编译器也只是会提示警告.但是函数声明却是很有必要的. 那么函数声明到底有声明作用呢? 其实函数声明的作用是让编译器帮你检查你调用函数时有没有错误. ...

  7. 详解C语言中头文件的作用

    大家好,先做个自我介绍,我是天蓬,欢迎阅读本篇博文. 由于本人理解能力不是很好,阅读他人文章时,常常看得晕头晕脑,这让我很是头疼,我想,世界上一定还有和我一样的人(哈哈,不是说你么笨哦).所以,我将会 ...

  8. C语言中的逗号的作用,C语言逗号运算符和逗号表达式基础总结

    逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b 输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 ...

  9. c语言中什么语句的作用是结束本次循环,c语言中结束本次循环的语句是什么

    c语言中结束本次循环的语句是"continue".控制语句continue只能作用于循环体中,其作用是结束本次循环,跳到判断循环的位置,即重新开始下一次循环. 本教程操作环境:wi ...

最新文章

  1. 用双注意力模块来做语义分割
  2. Musical Theme
  3. SQL SERVER数据库多条件查询
  4. h5c3 part6 flex
  5. Windows 容器
  6. oracle在archivelog模式进行rman备份和恢复
  7. java读取某个文件夹下的所有文件
  8. Navicat使用教程:获取MySQL中的行数(第1部分)
  9. 《算法竞赛进阶指南》0.1位运算
  10. linux挂载sata硬盘分区,Linux下挂载硬盘分区的几种方法
  11. 软件项目管理的常见问题
  12. 如何批量快速提取复制文件夹里所有文件夹名和文件名(包括所有子文件里的所有文件夹名和文件名)详细步骤
  13. Redis深度历险——原理与集群篇
  14. 【PowerJob】值得你拥有的新一代分布式任务调度与计算框架
  15. 西瓜书课后习题5.5源码
  16. 5.8 创建查找重复项查询
  17. 第29课:AD中class,设计参数,规则的设置
  18. 软件工程——(1)软件与软件工程 思维导图
  19. PL/pgSQL之入门
  20. 竞赛图强连通分量大小幂和计数 - 组合计数 - 多项式

热门文章

  1. [转] sql server 跨数据库调用存储过程
  2. offline .net3.5
  3. SQL游标使用方法SQL游标使用方法(转)
  4. [转载] 民兵葛二蛋——第1集
  5. iOS 键盘风格详解UIKeyboardType
  6. python全栈开发_day10_函数的实参和形参
  7. 洛谷P4777 【模板】扩展中国剩余定理(EXCRT)
  8. Linux:进程实例信息(/proc)
  9. 用公众号获取 任意公众号文章列表 软件还是免费
  10. Log4j的扩展-支持设置最大日志数量的DailyRollingFileAppender