extern和static关键字

1、对函数的应用
static
声明和定义内部函数时都要加

extern
一般的函数就是外部函数,不需要extern

2、对变量的应用
extern:访问其他文件中的全局变量
头文件不能定义变量,否则链接期报错(不清楚为啥,不过,一般也不这么做。详见:永远不要在.h文件中定义变量!)

例子:
fun.c
int a = 100;

main.c
extern int a;    //声明外部全局变量
extern只能用来声明变量,表明变量是外来变量,不能用来定义变量
如果引用的变量是外来变量,不写extern链接期报错

static:定义一个内部变量。外部文件不能访问,即使main.c变量声明加了extern
static int a;
时间: 2024-12-18 01:22:34

extern和static关键字的相关文章

C语言(五)extern和static关键字

一.extern与函数 如果一个程序由多个源文件,编译成功后会生成对应的多个目标文件,这些目标文件还不能单独运行,因为这些目标文件之间可能会有关联,比如:a.obj文件可能会调用c.obj中定义的一个函数.将这些相关的目标文件链接在一起后生成可执行文件 1.外部函数和内部函数 1)外部函数:如果在当前文件中定义的函数允许在其它文件访问.调用,就称为"外部函数".C语言规定,不允许有同名的外部函数. 2)内部函数:如果在当前文件中定义的函数只能在内部使用,就称为"内部函数&qu

[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关键字引出的一些关于作用域和链接属性和存储类型的问题

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

static关键字 详解

原文地址:http://blog.csdn.net/keyeagle/article/details/6708077 google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大论不知所云要么在关键之处几个字略过,对于想挖掘底层原理的初学者来说参考性不是很大.所以,我这篇博文博采众家之长,把互联网上的资料整合归类,并亲手编写程序验证之. C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有

链接(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; }

static关键字分析【转】

本文转载自:http://flyingcat2013.blog.51cto.com/7061638/1564695 C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错.伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字. 关键字static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,

C语言学习笔记(二) static关键字详细分析

C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错.伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字. 关键字static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量.随后,static在C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数.为了避免引入新的关键字,所以仍使用st

C语言关键字register、extern、static、一些总结

C语言中: 一.register变量 关键字regiter请求编译器尽可能的将变量存在CPU的寄存器中.有以下几点注意的地方. register变量必须是能被CPU寄存器所接受的类型,这通常意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度.但是,有些机器的寄存器也能存放浮点数. register变量可能不存放在内存中,所以不能用取址符运算符" & ". 只有局部变量和形参可以作为register变量,全局变量不行. 静态变量不能定义为registe

C语言关键字register、extern、static、一些总结,及项目中使用的心得

首先介绍两个概念: 一.变量的生存周期: 变量从建立到撤销的时间段成变量的生存周期.静态变量,从变量产生到整个程序执行结束.当函数使用变量结束后,变量的存储空间依然存在,变量的值也会随着函数的对其的使用而改变.如在函数内定义了一个static变量,那第一次调用该函数后,该变量的值将会被保留,当第二次被调用时,该变量的值还是第一次调用结束时的值.动态变量,顾名思义,变量的存储空间是随着函数的调用动态产生和撤销的.如,在一个函数里定义了动态变量,变量的周期指从变量建立到函数结束,而不是这个程序结束.