C语言static和extern关键字

1.static

  • static修饰的变量,自始至终只有一块空间,当前文件才能使用,生命周期是从定义开始直到程序结束;
  • 全局变量的定义是在.c文件中,但是声明全局变量是在.h中;
  • static:静态型,用它定义的变量自动初始化为0值或空值,常用于修饰变量或函数,只能在当前".c"文件中使用,static类型的变量只用一块空间,并且此变量的值有继承性;
practice.h头文件
//防止此practice.h头文件被很多文件调用使得重复包含
#ifndef _PRACTICE_H
#define _PRACTICE_H
        void call_func();
#endif // !_PRACTICE_H
main.c
#include <stdio.h>
#include "practice.h"
static int i = 10; //static定义变量,只能在当前 main.c 文件中使用
	int main ()
	{
        printf("[%s]i = %d\n",__FUNCTION__,i); //__FUNCTION__代表是在哪个函数
        call_func(); //直接调用接口去调内部的func函数
        return 0;
	}
practice.c源文件
#include <stdio.h>
	//static把func函数隐藏起来,封装一层
	static void func ()
	{
        int i = 2;
        printf("[%s]i = %d\n", __FUNCTION__, i);
	}
	void call_func()
	{
        func();
	}

result:
在这里插入图片描述

2.extern

  • extern不能改变被引用的变量的值和类型,是说明型不是定义用的;
practice.h头文件
//防止此practice.h头文件被很多文件调用使得重复包含
#ifndef _PRACTICE_H
#define _PRACTICE_H
        void func();
#endif // !_PRACTICE_H
main.c
#include <stdio.h>
#include "practice.h" //自定义的头文件用""
	int i = 10; //定义一个全局变量i,其他文件也可以引用
	//程序先进入main主函数,在main里往下调用其他文件或本文件中的功能函数
	int main ()
	{
        printf("[%s]i = %d\n",__FUNCTION__,i); //__FUNCTION__代表是在哪个函数
        func(); //调用func()是在其他文件中的函数,要在头文件中包含一下
        return 0;
	}
practice.c源文件:放源功能函数的定义
#include <stdio.h>
//函数func本身的定义写在本.c文件中
	void func ()
	{
        //extern不能改变被引用的变量'i'的值和类型
        extern int i; //说明变量i是外部引用的
        printf("[%s]i = %d\n", __FUNCTION__, i);
	}

result:
在这里插入图片描述

函数头文件的声明前加extern与不加extern有什么区别
函数默认是extern属性,声明时加不加extern没区别,C语言中,extern修饰符用在变量或函数声明前,说明此变量或函数是在别处定义的,要在此引用;
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值