具体实例理解c语言关键词extern和static对于全局变量的作用

本文详细解释了C语言中extern和static关键词如何影响全局变量。extern用于声明外部全局变量,而static不仅影响全局变量,还能作用于局部变量。static全局变量限制在本源文件内使用,解决了重名问题;extern则用于引用其他源文件的全局变量或函数。通过示例展示了extern和static的使用规范,以及在多文件项目中的编译和链接规则。
摘要由CSDN通过智能技术生成

extern对于外部全局变量是有作用,但不能说对于局部变量有作用,而是对作用域(全局/局部)有作用;

static既对于全局变量有作用,又对于局部变量有作用;

static对于局部变量的作用比较容易理解;

extern只能去声明引用外部源文件的全局变量/函数,但是这个extern声明语句可以放在任意位置(全局/局部);

所以只分析extern和static分别对全局变量的作用;

什么是源文件(*.c/*.cpp),什么是头文件(*.h/*.hpp),两者不一样;

(1)以下四种放在全局位置的包含变量的语句:

extern int v;//声明去引用外部源文件的全局变量(可以写任意多次)

int v;//定义本文件的变量(只能写一次)

int v = 8;//定义本文件的变量(只能写一次)

extern int v = 8;//声明去引用外部源文件的变量并且定义(如果外部源文件没有v的定义,那么编译无错,否则就是重定义);

第四种语句就是鸡肋,所以有warning:

(2)以下四种放在全局位置的包含函数的语句:

extern int fun(int a);//声明去引用外部源文件的全局函数(可以写任意多次)

int fun(int a);//声明去引用外部源文件或者声明本文件的函数(可以写任意多次)

int fun(int a){........}//定义本文件的函数(只能写一次)

extern int fun(int a){........}//鸡肋warning;

(3)static对于全局变量的修饰

静态全局变量,只能在本源文件内使用,不能在其他源文件中extern使用;

解决重名问题,如果没有static修饰符,那么整个程序的所有源文件都不能使用相同名字的量;

源文件.c.cpp不是头文件.h.hpp;

#include "abc.h"只是简单的复制abc.h的内容到语句的位置而已,和直接把abc.h的内容写下来没有区别;

 

(4)例子:

源文件1:demo.cpp

//demo.cpp
#include <iostream>

using namespace std;

//stafun with the same name as the other src's static function, that's ok.
int stafun(int a)
{
	cout << "main fun\n";
}
extern int extt;
extern int extfun(int a);
//extern int stat; //error
//extern int stafun; //error

int main()
{
	extt++;
	extfun(6);

	stafun(6);//call main fun
    return 0;
}

源文件2:d2.cpp

//d2.cpp
#include <iostream>

using namespace std;
i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值