extern 和 static

 (1) extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量.

 (2) static 表示静态的变量,分配内存的时候, 存储在静态区,不存储在栈上面.

static 作用范围是内部连接的关系, 和extern有点相反.它和对象本身是分开存储的,extern也是分开存储的,

但是extern可以被其他的对象用extern 引用,而static 不可以,只允许对象本身用它. 具体差别首先,static与extern

是一对“水火不容”的家伙,也就是说extern和static不能同时修饰一个变量;其次,static修饰的全局变量声明与定义同时进行,

也就是说当你在头文件中使用static声明了全局变量后,它也同时被定义了;最后,static修饰全局变量的作用域只能是本身的编译单元,

也就是说它的“全局”只对本编译单元有效,其他编译单元则看不到它

时间: 2024-10-22 17:55:28

extern 和 static的相关文章

<<黑马程序员>>extern与static的使用注意

extern与static对函数的作用: extern 修饰外部函数 ①  定义的函数可以被本文件和其他文件访问. ②  默认情况下所有函数都是外部函数 ③  不予许有同名的外部函数 extern对函数的作用 ①  完整的声明以个外部函数. ②  完整的定义一个外部函数. static 修饰内部函数 ①  定义的函数只能被本文件访问,其他文件不可以访问. ②  不同文件中可以由同名的内部函数. static对函数的作用 ①  声明一个内部函数. ②  定义一个内部函数. extern 对变量的作

Extern和static

http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html 1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编

链接(extern、static关键词\头文件\静态库\共享库)

原文链接:http://www.orlion.ga/781/ 一. 多目标文件的链接 假设有两个文件:stack.c: /* stack.c */ char stack[512]; int top = -1; void push(char c) {         stack[++top] = c; } char pop(void) {         return stack[top--]; } int is_empty(void) {         return top == -1; }

IOS的变量前加extern和static字段

IOS的变量前加extern和static字段 前一阵子,做项目的时候到网上找Demo,打开运行的时候发现其中变量前有关键字extern和static,所以我研究了一下子 对于extern来说可以理解为扩展吧是这样的是从一个类扩展到另一个类中的 在SplashViewController.m中定义一个变量是这样的 #import "SplashViewController.h" NSString* [email protected]"123"; @implement

话说extern和static

以前对extern.static的一些东西一直模棱两可.今天好好来梳理了一番.. static关键字 被static修饰的变量或函数称之为静态成员.函数. 存储位置:static修饰的变量存放在静态区(全局区).通常有以下特点: 修饰的变量只能在本源文件中访问 存放在此的变量在程序结束后由os自动释放,生存周期随程序 仅能在编译时期定义初始化一次. 以后操作都是在上次操作结果基础上进行 若是未初始化的静态变量,os将默认为其赋值为0或者空字符 静态局部变量与静态全局变量不同的一点: 虽然静态局部

[C]控制外部变量访问权限的extern和static关键字

一.extern 概述 编译器是由上至下编译源文件的,当遇到一些函数引用外部全局变量,而这个变量被定义在该函数声明主体的下方,又或者引用自其它的编译单元,这个情况就需要extern来向编译器表明此变量是一个外部变量 问题1.运用extern实现全局变量声明提升效果 #include <stdio.h> void fun(void); int main(void) { fun(); } void fun(void) { printf("%d\n", v); } int v =

关键字extern和static

extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是[email protected]_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),因为C++支持函数的重载    第二,当e

static和extern使用 /static和const联合使用

static: 1.修饰局部变量,被static修饰局部变量,延长生命周期,跟整个应用程序有关 * 被static修饰局部变量,只会分配一次内存 * 被static修饰局部变量什么分配内存? 程序一运行就会给static修饰变量分配内存 2.修饰全局变量,被static修饰全局变量,作用域会修改,只能在当前文件下使用 extern:声明外部全局变量,注意:extern只能用于声明,不能用于定义 extern工作原理:先会去当前文件下查找有没有对应全局变量,如果没有,才回去其他文件查找 exter

关于extern和static关键字引出的一些关于作用域和链接属性和存储类型的问题

在进入正题前我们必须了解一些概念: 标识符:标识符不仅仅代表着变量的名字,main()函数的main也是一个标识符,这点很重要. 存储类型:即变量的存储位置及其生存周期:静态区:分为两块 .date 已显式初始化的全局变量了静态变量 .bss 存放未初始化的全局或者静态变量 注意:静态变量的初值是在编译时就进行初始化了:意思就是用static修饰的变量赋过数值的话就保存为他的初值,如果没有初始化的话就赋值为零,且整个程序只初始化一次:即不管static int i = 1:或者这 static