cout << errors:// external declaration// uses crrors defined in file2记住:在多文件程序中,可以在一个文件(且只能在一个

本文讲述了C++中外部变量和内部静态变量的使用,强调了在多文件程序中如何通过extern关键字共享数据,以及静态变量如何隐藏同名全局变量。通过实例展示了链接性对变量地址的影响和编译链接过程。

cout << errors:

// external declaration

// uses crrors defined in file2

记住:在多文件程序中,可以在一个文件(且只能在一个文件)中定义一个外部变量。使用该变量的
其他文件必须使用关键字extern声明它。
应使用外部变量在多文件程序的不同部分之间共享数据;应使用链接性为内部的静态变量在同一个文
件中的多个函数之间共享数据(名称空间提供了另外一种共享数据的方法,C++标准指出,使用static来创
建内部链接性的方法将逐步被淘汰)。另外,如果将作用域为整个文件的变量变为静态的,就不必担心其名
称与其他文件中的作用域为整个文件的变量发生冲突。
程序清单9.6和9.7演示了C++如何处理链接性为外部和内部的变量。程序清单9.6(twofilel.cpp)
定义了外部变量tom和dick以及静态外部变量harry。这个文件中的main()函数显示这3个变量的地
址,然后调用 remote_access()函数,该函数是在另一个文件中定义的。程序清单9.7(twofile2.cpp)
列出了该文件。除了定义remote_access()之外,该文件还使用extern关键字来与第一个文件共享tom。
接下来,该文件定义一个名为dick的静态变量。static限定符使该变量被限制在这个文件内,并覆盖
相应的全局定义。然后,该文件定义了一个名为harry的外部变量,这不会与第一个文件中的harry发
生冲突,因为后者的链接性为内部的。随后,remote-access()函数显示这3个变量的地址,以便于将
它们与第一个文件中相应变量的地址进行比较。别忘了编译这两个文件,并将它们链接起来,以得到
完整的程序。

程序清单9.6 twofile1.cpp
// twofilel.cpp -- variables with external and internal linkage
#include <iostream>
int tom = 3:
int dick - 30:
static int harry = 300:

// function prototype
void remote_access():

int main()

using namespace std:
cout << "main() reports the following addresses: \n";
cout << &tom << " = stom, " << &dick << " - &dick, ":
cout << sharry << " = sharry\n";
remote_access ():
return 0:

// file2
static int errors = 5: // known to file2 only
void froobish()

cout << errors:

// uses errors defined in filel
但如果文件定义了一个静态外部变量,其名称与另一个文件中声明的常规外部变量相同,则在该文件
中,静态变量将隐藏常规外部变量:
// filel
int errors = 20;

...

// to be compiled with two file2.cpp
// external variable definition
// external variable definition
// static, internal linkage

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值