extern用法

今天看了下extern的用法,于是自己总结一波。

extern 是计算机语言中的关键字,可至于变量或函数前,以表示变量或函数的定义在别的函数中。提示编译器遇到此变量或函数时,在其他模块中寻找其定义,另外extern也可用来进行链接指定。

1.变量定义在别的函数中,当编译器遇到extern 变量时,以后出现此变量就会在别的模块寻找定义



此处声明和定义我是分开的,可以直接在声明后初始化,同样属于声明,如果还有test.cpp的定义就会编译出错,重复定义。


运行结果:


2.函数

实际上函数的声明和定义都不需要添加extern关键字,在实际使用的时候也最好不要添加关键字。
如果一个函数是不会被其它文件调用的,那么这个函数应该被声明成static的。
如:
extern int func(void) {  return 0;  }
int func(void){  return 0;  }
是等价的,另外
extern int func(void);
int func(void);也是等价的。

3.extern C:保持这部分代码,以C语言的风格编译。c++在编译时,为了解决函数的多态问题,会将函数名和函数联合起来生成一个中间的函数名称,而C语言不会,使用extern “C”进行链接指定,告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。

//test.h
#ifndef _TEST_H_ 
#define _TEST_H_
#ifdef __cplusplus
extern "C"{
#endif
extern int a; //声明一个全局变量a 
extern int b; //声明一个全局变量b 
int add(int s,int t);
#ifdef __cplusplus
} ;
#endif
#endif


//test.c
#include"test.h"
#include <stdio.h>
int a=10; //定义 
int b=20; //定义 
int add(int s,int t){
#ifndef _cplusplus
printf("这是一个c程序!!!\n"); 
#endif
#ifdef __cplusplus
printf("这是一个c++程序!!!!!\n");
#endif
return s+t;
}

//main.cpp

#include <iostream>
#include "test.h"
using namespace std;
int main(int argc, char** argv) {
#ifdef __cplusplus
cout<<"这是一个c++程序"<<endl;
#endif
#ifndef _cplusplus
cout<<"这是一个c程序"<<endl;
#endif
cout<<"a="<<a<<",b="<<b<<endl;
int c=add(1,2);
printf("c=%d",c);
return 0;
}

运行结果:


注:编译器不同结果会不同

关于ifdef,ifndef请看这篇文章:https://www.cnblogs.com/Joyin/archive/2009/11/26/2262130.html

关于__cplusplus, _cplusplus分别是c++和c所独有的,有兴趣的可自行百度了解

参考文章:

http://blog.csdn.net/lishuhuakai/article/details/45944735

https://baike.baidu.com/item/extern/4443005?fr=aladdin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值