`
jinghuainfo
  • 浏览: 1525008 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C语言关键字 - 乱世枭雄:static与extern

 
阅读更多

++++++++++++++++++++++++++++++++++++++++++

《C语言深入理解系列- 乱世枭雄:static与extern》

查看其它博文请关注原创作者。

本文系本站原创,欢迎转载! 转载请注明出处:

http://blog.csdn.net/mr_raptor/article/details/7211267

++++++++++++++++++++++++++++++++++++++++++

乱世枭雄:static与extern

描述:在C程序世界里,不同代码国度以.c文件为国界分隔开来,在单个国家(C源文件)里有不同的函数占山为王,军阀割据,每个C程序世界里只有一个君主main和其首都(main函数体),main通过下传圣旨(参数),调用各种军阀(函数),来掌控整个C程序世界的有序运行。在和谐世界的幌子下,却是别番风景,某军阀(函数)心怀叵测,不想单纯听从于main的指挥与调度,树立了自己的政权旗帜static。static不用听附与main的调度,自己做主,私藏金库(空间)。而main对此却很无奈,因为相对static来说,extern更是让它皇权难保。不同的国家(不同的.c文件)之间通过extern相互私通,传递信息。二者联合作乱,让编程者逻辑混淆。当然,如果编程者连一个国家都没有走出去过(指将所有代码写到一个.c文件里),不能够上升到一个宏观的角度,将不知所云。乱世出枭雄,切听我慢慢道来其中一二。

作用:简单来说static修辞变量,就是指该变量空间独立于函数中的auto变量或叫栈变量(请查看auto关键字章节),static变量空间在内存中的静态区内被分配。如图xxx所示。

图xxx 程序内存分布示意图

在使用static的时候一定要注意以下两点:

1. static变量在程序运行(main启动)之前就已经被分配,它不像是局部变量那样动态在栈上分配的,它在程序彻底退出之后才被释放。

2. static变量有访问权限,在子函数里声明的static变量,只能在该函数内访问,如果static变量在函数体外声明,它的访问权限就是本文件内。

3. static不仅可以修辞变量,还可以用来修辞函数,如果用来修辞函数,和第2条有着相似的意义,表示该函数访问权限限制在本源文件内。

记住以上三点,可以解释很多初学者不明白的问题:

  • 为什么子函数里声明的static变量,每次访问其值都是上一次的结果?答案见要点1。
  • 为什么子函数里的static变量不能在子函数外面访问?答案见要点2。
  • 如何避免不同文件里命名冲突的问题?答案见要点3。

带着上面的理解,再回头理解描述里的小故事:乱世枭雄。

extern是指,当前变量或函数不是在本源文件内声明的,它是外部变量或外部函数,正所谓“外来的和尚会念经”,能很好的体现extern的价值。当我们在本文件里试图引用一个外部声明的全局变量或函数时,可以在其前面加上extern,表示它是外来和尚。

宏观理解:通过上面的分析看来,C程序里,通过函数将功能区分开来,每个函数完成一个功能(这也是为什么函数的英文叫function),而又将一片相关联的功能集合在一个源文件里,这些功能和相关联的功能之间通常要有联系,而这种联系(亦可叫通信)就是通过static和extern进行联系起来的,当然这里面还要有头文件的功劳,关于头文件的解释,后面会单独拿来分析。

常见错误理解:

菜鸟:static表示常量。

你要这么说const关键字哭了。static不表示常量,理解它就从上述3点来理解。

菜鸟:static表示其值会被记录住。

这么说只是片面理解。

++++++++++++++++++++++++++++++++++++++++++

《C语言深入理解系列- 乱世枭雄:static与extern》

查看其它博文请关注原创作者。

本文系本站原创,欢迎转载! 转载请注明出处:

http://blog.csdn.net/mr_raptor/article/details/7211267

++++++++++++++++++++++++++++++++++++++++++

分享到:
评论

相关推荐

    C语言中关键字const、static、volatile、extern、auto、register的用法分析.doc

    C语言中关键字const、static、volatile、extern、auto、register的用法分析

    C语言关键字的用法

    C语言中有32个关键字其中关于static与extern关键的用法详细介绍

    C语言关键字详解

    C语言关键字详解,很全面,希望能给大家带来帮助。

    extern关键字的作用

    extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用extern关键字的作用...

    C语言中extern关键字详解.docx

    C语言中extern关键字详解.docx ,C语言中extern关键字详解.docx

    标准 C 函数参考 txt 格式

    原型:extern int abs(int x); 用法:#include 功能:求整数x的绝对值 说明:计算|x|, 当x不为负时返回x,否则返回-x 举例: #include #include int main() { ...... int x; x=-5; printf("|%d|=%d\n",x,abs...

    浅谈C/C++中的static与extern关键字的使用详解

    本篇文章是对C/C++中的static与extern关键字的使用进行了详细的分析介绍,需要的朋友参考下

    C语言extern关键字的用法

    1、本文详细描述了c语言中的关键字extern的作用。 2、通过详细示例,让读者更直观地阅读,更清晰的理解。 3、示例代码可直接复制,编译后可直接运行。 4、根据示例以及运行结果,让读者加强记忆及理解。

    C语言程序设计-C语言的基本符号与词汇.pptx

    C语言规定,合法的标识符必须以英文字母或下划线开头,是字母、数字和下划线的组成的序列,不能跨行书写,自定义的标识符不能与关键字相同。 2-2 C语言词汇 关键字又称保留字是C语言编译系统所固有的、具有专门意义...

    学习总结:C++中extern “C”含义深层探索.doc

    看看就知道:学习总结:C++中extern “C”含义深层探索.doc

    c语言32个关键字意义和用法

    c语言32个关键字意义和用法 例如:define auto struct static extern

    C语言常见问题集 原著:Steve Summit

    3.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部数据文件进行 "二进制" 读写。能否关掉填充, 或者控制结构域的对齐方式? 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? 3.12...

    C语言中的extern关键字详细讲述

    Extern_C,讲述extern的用法,和要注意的事项

    IOS 关键字const 、static、extern详解

    IOS 关键字const 、static、extern详细介绍: 一、前言 阅读别人的代码(一些优秀的源码)总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思的,但在概念上和具体的用法上却依然有些模糊,故...

    Wasmer - :snake::spider_web:运行WebAssembly二进制文件的Python扩展-python

    示例 examples/simple.rs 中有一个玩具程序,用 Rust(或任何其他编译为 WebAssembly 的语言)编写:#[no_mangle] pub extern fn sum(x: i32, y: i32) -> i32 { x + y } 编译成 WebAssembly 后,生成 examples/...

    c语言关键字

    详细的c语言介绍。 parameter 参数 条件语句 constant 常量 static 静态的 condition variable 变量 extern 外部的 statement) 选择 select

    C_gjz.rar_float

    C语言中的关键字 附录2 C语言中的关键字 C语言共有32个关键字: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static...

    c语言中extern关键字详解.doc

    c语言中,有众多的关键字,这里对extern关键字进行详细的阐述,希望能加深大家的理解!

    c语言中static和extern的用法详细解析

    一,static和extern:大工程下我们会碰到很多源文档。文档a.c 代码如下:static int i; //只在a文档中用int j; //在工程里用static void init() //只在a文档中用{}void callme() //在工程中用{ static int sum;}...

    c语言深度剖析

    1.3,最名不符实的关键字----static................ 1.3.1,修饰变量....................................... 1.3.2,修饰函数....................................... 1.4,基本数据类型----short、int、long、...

Global site tag (gtag.js) - Google Analytics