[C++再学习系列] 变量的声明、定义与extern关键字

简介:

变量的声明与定义:

      A definition of a variable allocates storage for thevariable and may also specify an initial value for the variable. There must be one and only one definition of a variable in aprogram.

      A declaration makes known the type and name of the variableto the program. A definition is also a declaration:When we define a variable, we declare its name and type. We can declare a name without defining it by using theextern keyword. A declaration that is not also a definition consists ofthe object's name and its type preceded by the keyword extern.

 

      函数的定义与声明很好区分,因为函数必须有函数体,编译器才给它分配空间。而变量仅需一个名字和类型,编译器即可分配空间给它。

      声明只是告诉编译器某个变量和函数是存在的,但并没有真正分配空间。所以当后面的代码用到前面声明的变量或函数时,编译时不会报错,而链接时会报错。因为链接时编译器将寻找这些变量和函数的内存地址,如只声明未定义,链接器是找不到内存地址的,将报错。总之,定义将分配空间,所以定义只能有一次(多次定义则编译错误)。而声明不分配空间,故可声明多次。

 extern关键字

      extern可置于变量或者函数前,以标示变量或者函数的定义存在于其他文件中,提示编译器遇到此变量和函数时到其他模块(obj文件或库文件)寻找其定义。另外,extern也可用来进行链接指定。

      并非所有的变量都能用extern声明,只有全局变量并且没有被static声明的变量才能声明为extern。如果不想自己源文件中全局的变量被其他文件引用,加上static声明即可。

 

示例:

声明且定义:

intfudgeFactor;

std::stringhello("Hello, world!");

void foo() {/*… */}

 

声明:

extern intfudgeFactor;

extern stringhello;

voidfoo();         // "extern" isoptional with function declarations

 

注意:使用extern关键字,要确保其声明的变量和函数一定要在某个cpp文件中定义。不要直接在h文件中定义,这样多次include后将产生多处定义。

参考:http://blog.csdn.net/zhenjing/archive/2009/07/11/4340306.aspx

 


本文转自 zhenjing 博客园博客,原文链接:http://www.cnblogs.com/zhenjing/archive/2010/10/12/1848691.html   ,如需转载请自行联系原作者

相关文章
|
8天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
15 2
|
19天前
|
存储 安全 编译器
C++学习过程中的一些值得注意的小点(1)
C++学习过程中的一些值得注意的小点(1)
|
20天前
|
存储 算法 数据库
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
【C++ 软件设计思路】学习C++中如何生成唯一标识符:从UUID到自定义规则
101 0
|
22天前
|
存储 C++ 容器
学会在 C++ 中使用变量:从定义到实践
C++中的变量是数据容器,包括`int`、`double`、`char`、`string`和`bool`等类型。声明变量时指定类型和名称,如`int myNum = 15;`。`cout`与`<<`用于显示变量值。常量用`const`声明,值不可变。变量名应唯一,遵循特定命名规则,常量声明时需立即赋值。
111 1
|
25天前
|
算法 安全 编译器
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)
25 0
|
8天前
|
程序员 C++
C++语言模板学习应用案例
C++模板实现通用代码,以适应多种数据类型。示例展示了一个计算两数之和的模板函数`add<T>`,可处理整数和浮点数。在`main`函数中,展示了对`add`模板的调用,分别计算整数和浮点数的和,输出结果。
9 2
|
9天前
|
编译器 C语言 C++
【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
【C++的奇迹之旅(二)】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例
|
22天前
|
安全 算法 编译器
【C++ 基础 ()和{}括号】深入探索 C++ 的变量初始化:括号和大括号的奥秘
【C++ 基础 ()和{}括号】深入探索 C++ 的变量初始化:括号和大括号的奥秘
33 0
|
22天前
|
存储 算法 编译器
【C++ 关键字 static_assert 相关问题】C++ 关于静态断言的编译问题 ,深入了解静态断言
【C++ 关键字 static_assert 相关问题】C++ 关于静态断言的编译问题 ,深入了解静态断言
28 0
|
22天前
|
设计模式 算法 测试技术
【C/C++ 编程 哑对象】了解和学习哑对象在C/C++ 编程中的使用
【C/C++ 编程 哑对象】了解和学习哑对象在C/C++ 编程中的使用
42 2