extern 声明

 extern 声明不会引起内存被分配它可以在同一文件中或同一程序的不同文件中出现多
次典型情况下全局对象的声明只在公共的头文件中出现一次当一个程序文件需要引用
这个全局对象时它可以包含这个头文件
// 头文件
extern int obj1;
extern int obj2;
// 文本文件
int obj1 = 97;
int obj2;
既指定了关键字extern 又指定了一个显式初始值的全局对象声明将被视为该对象的定
义编译器将会为其分配存储区而且该对象后续的定义都被标记为错误例如
extern const double pi = 3.1416; // 定义
const double pi; // 错误: 重复定义 pi
关键字extern 也可以在函数声明中指定惟一的影响

 

============

在函数被调用之前函数体必须先被声明例如
// 函数 calc() 的声明
// 其定义由其他文件提供
void calc(int);
int main()
{
int locl = get(); // 错误: get() 尚未声明
calc(locl); // ok: 找到 calc() 的声明
// ...
}
对象定义有下列两种形式
type_specifier object_name;
type_specifier object_name = initializer;

=============================

头文件为所向extern 对象声明函数声明以及inline 函数定义提供了一个集中的位置

 

extern int ival = 10;
double fica_rate;
extern void dummy() {}
虽然ival 是用extern 声明的但是它的显式初始化使得它实际上是个定义类似的情况
虽然dummy()显式地声明为extern 但是空花括号代表该函数的定义尽管fica_rate 没有被
显式地初始化但是因为缺少extern 因而也被视为C++中实际的定义这些定义如果在同
一程序的两个或多个文件中被包含就会产生重复定义的编译错误

 

但是符号常量定义以及inline 函数定义是特殊的定义符号常量和inline 函数可以被定义多次

 

const int buf_chunk = 1024;
extern char *const bufp;
// ----- 程序文本文件 -----
char *const bufp = new char[buf_chunk];

虽然bufp 被声明为const 但是它的值却无法在编译时刻被计算出来它的初始化值是
一个要求调用库函数的new 表达式如果bufp 在头文件中被初始化那么它将在每个包含
它的文件中被定义这不但浪费了空间而且可能与程序员的意图不符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值