【C++注意事项】2 变量声明和定义

简介:

不可能将所有的C++程序放到一个文件中咯,因此C++就支持了分离式编译(separate compilation)机制,它允许将程序分为若干个文件,每个文件可被独立编译。这样说明了,当你的程序有很多文件时,修改其中一个文件后不需要将所有文件都重新编译一遍,只需要编译修改过的就好,然后将它们都链接起来。

C++是如何支持分离式编译的呢?通过将声明和定义分离开来。

声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含该名字的声明。

定义(definition)负责创建与名字关联的实体。

一个声明语句由一个基本数据类型(base type)和紧随其后的一个声明符(declarator)列表组成。

定义还需要申请存储空间,也可能会为变量赋一个初始值。

如果想声明一个变量而非定义它,就在变量名前添加关键字extern关键字标记的变量赋一个 初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明,而变成了定义。

extern int i;  // 声明i而非定义i
int j;  // 声明并定义j

在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。

// 错误
int main()
{
    extern int i;
    int i=10;

    return 0;
}

变量能且只能被定义一次,但是可以被多次声明。

// 这样是可以得
extern int i;
extern int i;
extern int i;

int main()
{
    int i=10;

    return 0;
}

如果要在多个文件中使用同一个变量,就必须将声明和定义分离。但是此时变量的定义就必须出现在且只能出现在一个文件中,而其他用到该变量的文件必须对其进行声明,却绝对不能重复定义。

另外C++还会在编译阶段进行类型检查(type checking),所以也称C++是一种静态类型(statically typed)语言。程序越复杂,静态类型坚持越有助于发现问题。然后,前提是编译器必须知道每一个实体对象的类型,这就要求我们在使用某个变量之前必须声明其类型。



感谢您的访问,希望对您有所帮助。 欢迎大家关注、收藏以及评论。

我的更多博客文章:NoMasp博客导读


为使本文得到斧正和提问,转载请注明出处:
http://blog.csdn.net/nomasp


目录
相关文章
|
6月前
|
C++
C++中类的定义与使用
C++中类的定义与使用
155 2
|
1月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
24 2
|
1月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
51 1
|
1月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
17 0
|
2月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
3月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
33 1
|
2月前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
62 0
|
4月前
|
编译器 C++ 运维
开发与运维函数问题之函数的返回类型如何解决
开发与运维函数问题之函数的返回类型如何解决
37 6
|
3月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
43 0
|
3月前
|
JSON Android开发 数据格式
Android c++ core guideline checker 应用问题之JSON compilation database的定义如何解决
Android c++ core guideline checker 应用问题之JSON compilation database的定义如何解决