C Primer Plus 第12章 12.3 存储类和函数
博客专区 > idreamo 的博客 > 博客详情
C Primer Plus 第12章 12.3 存储类和函数
idreamo 发表于1年前
C Primer Plus 第12章 12.3 存储类和函数
  • 发表于 1年前
  • 阅读 19
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

摘要: 函数也具有存储类。

函数也具有存储类。函数可以是外部的(默认情况下)或者静态的(C99增加了第三种可能性,即在第16章“C预处理器和C库"中将讨论的内联函数)。外部函数可以被其他文件中的函数调用,而静态函数只可以在定义它的文件中使用。例如,考虑一个包含如下函数声明的文件:

double gammma();  /*默认为外部的*/
static double beta();
extern double delta();

函数gamma()和delta()可被程序的其他文件中的函数使用,而beta()则不可以。因为beta()被限定在一个文件内,故可以其他文件中使用具有相同名称的不同函数。使用static存储类的原因之一就是创建为一个特定模块所私有的函数,从而避免可能的名字冲突。

通常使用关键字extern来声明在其他文件中定义的函数。这一习惯做法主要 是为了使程序更清晰,因为除非函数声明使用了关键字static,否则认为这是extern的。

使用哪种存储类

对于”使用哪种存储类?“这个问题的回答多半是"自动的”。否则为什么要选择自动类型作为默认类型?是的,我们知道乍看起来外部存储很有诱惑力。把变量都设成外部变量,就不用为使用参数和指针在函数之间传递数据而费心了。然而,这存在着一种不十分明显的缺陷。您将不得不为函数A()违背您的意图,偷偷修改了函数B()所用的变量而焦急。多年来,无数程序员的经验给出了无可置疑的证据,证明随意使用外部变量带来的这一不十分明显的危险远比它所带来的表面吸引力重要。

保护性程序设计中一个非常重要的规则就是“需要知道”原则。尽可能保持每个函数的内部工作对该函数的私有性,只共享那些需要共享的变量。除了自动类型以外,其他类型也是有用的,并且可用。但请在使用一个类型前,问问自己是否必须那样做。

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 12
博文 139
码字总数 224743
×
idreamo
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: