C语言学习记录:extern关键字

外部链接的静态变量具有文件作用域、外部链接和静态存储期

该类别有时候称为外部存储类别,属于该类别的变量称为外部变量。

把变量的定义性声明放在所有函数的外面便创建了外部变量。当然,为了指出该函数使用了外部变量,可以在函数中用关键字extern再次声明。

如果一个源码文件使用的外部变量定义在另一个源码文件中,则必须用extern在该文件中声明该变量。

例子:

int A = 1;
int Array[22];        //这俩都属于外部定义的

extern char name;     //这是声明的name在其他文件中被定义了,在这个文件使用。


int main(void)
{
    extern int A;
    extern int Array[];    //这俩是可省略的

/*
    假如:
    int A;
    int Array[];
    这样不对!!会屏蔽块作用域外的同名变量。
*/
}

还有一种情况

int main(void)
{
        
}

int B;

int function1(void)
{
    
}

B是外部变量,但只对function1()函数可见!!

外部变量的作用域:从声明处到文件结尾。

定义和声明:

int A = 1;    //定义A
int main(void)
{
    extern int A;    //使用在别处定义的A
}

第一次声明为“定义式声明”。第二次声明为“引用式声明”。

关键字extern表明该声明不是定义,而是指示编译器去别处查找其定义。

只能用extern来引用现有定义。程序读到extern时,并不会对其分配存储空间。

不能用关键字extern创建外部定义,只能用它来引用现有的外部定义。

外部变量只能初始化一次,且必须在定义该变量时进行。

C程序通常有许多单独源码文件。有时候,这些文件可能共用一个外部变量。 C 通过在一个文件中进行定义式声明,然后在其他文件中进行引用式声明来实现共享。除了一个定义式声明外,其他声明都要使用extern关键字。而且,只有定义式声明才能初始化变量。

在使用extern声明前,不能直接使用变量。(不声明,你啷个找的到)

外部函数:

int function_A(void);        //默认外部函数

static int function_B(void);

extern int function_C(void);

在其他函数中,可以调用function_A()、function_C(),但是不能使用function_B()。

因为static表明该函数属于特定模块私有。function_B()受限于所定义的文件,故,其他文件中可定义于function_B()同名的函数。(没啥子用)别玩这么花!!!

通常:extern声明定义在其他文件中的函数,方便调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值