C++ extern关键字

C++ extern关键字

C++中extern关键字使用

C++中extern关键字用法小结

C/C++中extern关键字详解

extern是一个关键字,它告诉编译器存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义,来看下面的例子

// extern.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
extern int i;
extern void func();
int _tmain(int argc, _TCHAR* argv[])//typedef wchar_t     _TCHAR;#define _tmain      wmain
{
	i = 0;
	func();
	return 0;
}
 
int i;
 
void func()
{
	i++;
	cout << "i = " << i << endl;
}

上面代码中变量i和函数func在文件末尾定义,所以变量需要使用extern关键字告诉编译器,变量在别的地方定义

在一个文件中定义了变量和函数, 在其他文件中要使用它们, 可以有两种方式:

  1. 使用头文件,然后声明它们,然后其他文件去包含头文件
  2. 在其他.cpp或者.c文件定义和声明,直接用extern关键字调用

第一个很常见,看第二个

devVar.cpp函数中定义

#include "stdafx.h"
 
int i;

extern.cpp中

// extern.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
extern int i;
extern void func();
int _tmain(int argc, _TCHAR* argv[])//typedef wchar_t     _TCHAR;#define _tmain      wmain
{
	i = 0;
	func();
	return 0;
}
 
void func()
{
	i++;
	cout << "i = " << i << endl;
}

编译工程,程序输出i = 1,这里使用extern关键字声明在其它cpp文件中定义的变量和函数

extern"C" 作用

C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时无法找到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名

比如说你用C 开发了一个DLL 库,为了能够让C ++语言也能够调用你的DLL 输出(Export) 的函数,你需要用extern “C” 来强制编译器不要修改你的函数名

声明和定义知识点

  • 定义也是声明,extern声明不是定义,即不分配存储空间
    extern告诉编译器变量在其他地方定义了
extern int i; //声明,不是定义
int i; //声明,也是定义
  • 如果声明有初始化式,就被当作定义,即使前面加了extern
    只有当extern声明位于函数外部时,才可以被初始化
extern double pi=3.1416; //定义
  • 函数的声明和定义区别比较简单,带有{}的就是定义,否则就是声明
extern double max(double d1,double d2); //声明
double max(double d1,double d2){} //定义
  • 除非有extern关键字,否则都是变量的定义
extern int i; //声明
int i; //定义

程序设计风格:

  • 不要把变量定义放入.h文件,这样容易导致重复定义错误
  • 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的
  • 也就是说可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Prejudices

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值