linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > c/c++/c# >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·Windows/Linux下配置Eclipse+C
·c语言static与extern的用法
·VC++(Ctime日期函数)应用
·typedef struct和struct的区别
·C/C++对文件操作
·C#发送Email邮件方法总结
·struct的初始化,拷贝及指针成
·C常用算法程序实例-线性代数方
·C语言入门实例 switch使用
·c++二叉树实现源代码
·对初学者的建议:如何学习C语言
·C++ Builder 处理控件中的文本
·常用的BCB & Delphi 函数
·一道C#面试题目引发的思考
·C++ Builder 使用Canvas对象的
最新文章
·使用C/C++扩展Python
·C语言入门实例 switch使用
·在C#里实现DATAGRID的打印预览
·如何使用 Visual C# .NET 创建
·C#发送Email邮件方法总结
·一道C#面试题目引发的思考
·c语言艺术清屏
·c语言static与extern的用法
·大数的阶乘算法
·C#编码好习惯
·构造函数,复制构造函数
·typedef struct和struct的区别
·struct的初始化,拷贝及指针成
·超强的指针学习笔记推荐
·STL中erase方法对链表类容器的
Google
 
c语言static与extern的用法
[ 作者:  加入时间:2007-11-23 10:35:02  来自:Linux联盟收集整理 ]
一,static和extern:96NLinux联盟
    大工程下我们会碰到很多源文件。96NLinux联盟

文件a.c96NLinux联盟
static int i; //只在a文件中用96NLinux联盟
int j;   //在工程里用96NLinux联盟
static void init()         //只在a文件中用96NLinux联盟
{96NLinux联盟
}96NLinux联盟
void callme()          //在工程中用96NLinux联盟
{96NLinux联盟
   static int sum;96NLinux联盟
}

上面的全局i变量和init()函数只能用在a.c文件中,全局变量sum的作用域只在callme里。变量j和函数callme()的全局限扩充到整个工程文件。所以可以在下面的b.c中用extern关键字调用。extern告诉编译器这个变量或者函数在其他文件里已经被定义了。96NLinux联盟

文件b.c96NLinux联盟
extern int j;    //调用a文件里的96NLinux联盟
extern void callme();  //调用a文件里的96NLinux联盟
int main()96NLinux联盟
{96NLinux联盟
  ...96NLinux联盟
}

extern的另外用法是当C和C++混合编程时如果c++调用的是c源文件定义的函数或者变量,那么要加extern来告诉编译器用c方式命名函数:96NLinux联盟

文件A.cpp调用a.c里面的变量i和函数callme()96NLinux联盟
extern "C"  //在c++文件里调用c文件中的变量96NLinux联盟
{96NLinux联盟
   int j;96NLinux联盟
   void callme();96NLinux联盟
}96NLinux联盟
int main()96NLinux联盟
{96NLinux联盟
   callme();96NLinux联盟
}

二,static法则:96NLinux联盟
    A、若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;96NLinux联盟
    B、若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;96NLinux联盟
    C、设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题;
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·OpenSSH学习笔记(安装配置openssh-4.6p1)  (2007-11-23 10:34:02)
 ·apache2+php5+mysql5+tomcat配置  (2007-11-23 10:31:47)
 ·apache2.2.0+php5.1.2+mysql5.0.21+gd 安装  (2007-11-23 10:30:48)
 ·红旗Linux6+apache2.2.6+mysql5+PHP5.2.4+ZO3.3.0  (2007-11-23 10:29:53)
 ·轻松掌握无文件备份、拥有所有归档的恢复  (2007-11-23 10:12:41)
 ·怎样解决CPU高度消耗(100%)的数据库问题  (2007-11-23 10:11:49)
 ·移动Linux操作系统中的TMP分区介绍  (2007-11-23 10:07:57)
 ·Linux操作系统的桌面全文搜索引擎Recoll  (2007-11-23 10:05:59)
 ·解决Linux系统播放器MP3标签乱码的问题  (2007-11-23 10:00:11)
 ·冲击Linux市场 微软嵌入式重心向亚洲转移  (2007-11-23 09:59:13)