extern、static关键字

extern、static 关键字在函数、全局变量、局部变量的作用各不相同。具体如下:
a.c

#include <stdio.h>

/*
 extern void printA();
 extern 可省略
 外部函数声明
 */
void printA();

void printB();

void printD();

//内部函数声明
static void printC();

//外部变量定义
int a;

//内部变量定义
static int b=100;

int main()
{
    a=10;
    printf("a=%d\n",a);

    printB();
    printC();

    printf("------------------------------\n");

    printD();
    printD();
}

/*
 extern void printA()
 extern 可以省略
 代表此函数为外部函数,可被其他文件访问
 */
void printA()
{
    printf("extern printA\n");
}

/*
 static 不可省略
 代表内部的函数printC(),只允许本文件使用
 */
static void printC()
{
    printf("static printC\n");
}

void printD()
{
    //非static的局部变量,每次调用printD()都会重新初始化。
    int aa=10;
    aa++;

    //static的局部变量,多次调用printD()只初始化一次。
    //变量bb的生命周期知道程序结束才结束(值一直会保留到程序结束)
    static int bb=10;
    bb++;

    printf("aa=%d, bb=%d\n",aa,bb);

}

b.c

#include <stdio.h>

//extern void printA();
void printA();

//错误写法,此函数为a.c中的内部函数,不允许这里访问
//void printC();

//外部变量声明
extern int a;

//多个文件相同名字的外部变量,值共享
int a;

//extern void printB()
void printB()
{
    printf("extern printB\n");
    printA();
    //printC();

    a++;
    printf("a=%d\n",a);

    //这里无法访问变量b,因为b为a.c的内部变量
    //extern int b;
    //printf("b=%d\n",b);
}

运行结果

a=10
extern printB
extern printA
a=11
static printC
------------------------------
aa=11, bb=11
aa=11, bb=12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值