浅谈声明和定义区别

开发 后端
这二个概念有必须解释一下 ,首先,必须知道“声明”和“定义”之间的区别,因为这两个术语在经常出现在我们平时的talking中,有责任去明白她们。

一般解释来说:声明是告诉编译器存在这么一个标识符。定义则是为程序申请一块内存。

 

例如:

  1. int x; //这是一个定义   
  2. extern int x; //这是声明   
  3. int x = 10; //这也是一个定义  

在程序中使用extern int x = 10,也是定义。

 

声明的操作一般使用在头文件中,这样就可以在多个源文件中引用同一个变量。这也表明了为什么不能使用定义。因为头文件中在被包含进源文件后,实际上是成为了源文件的一部分。

所以,如果是在头文件中,定义一个变量,那么会在多个源文件中出现这个变量的定义。也就是所谓的重复定义。

 

以上说的是不能在头文件中定义变量。但是有三个例外。头文件可以定义类、值在编译时就知道的const对象和inline函数。

 

在头文件中定义这些实体(因为它们不只是声明了),是因为编译器需要它们的定义来产生代码。

例如,为了产生能定义和使用类的对象的代码,编译器需要知道组成该类的数据成员,同样还需要知道能够在这些对象上执行的操作。类的定义提供了这些信息,所以需要在头文件中定义类

 

因为const变量默认为定义它的文件的局部变量。所以即使在多个源文件中出现这个变量的定义也是合法的。

1、当const变量使用常量表达式初始化时,它的初始化过程可以在头文件中实现。

2、如果const变量不是使用常量表达式初始化,那么就不能在头文件中初始化该变量,而是要在源文件中定义并初始化该变量。然后在头文件中添加extern声明,以使其能够被多个文件共享。
 

【编辑推荐】

  1. 秘诀!教你阅读复杂的C/C++声明
  2. 8.1.2 声明结构体的类型
  3. 3.1 局部变量的隐式声明
  4. 3.1.2 在foreach循环中使用隐式声明
责任编辑:于铁 来源: 聚友博客
相关推荐

2024-01-05 08:31:08

C语言

2011-06-02 13:28:17

OverloadOverride

2009-10-20 14:03:48

VB.NET数组声明VB.NET数组初始化

2009-09-02 14:18:08

C#声明COM接口

2021-06-10 18:59:41

Java编程语言

2009-07-01 13:54:03

JSP注释

2009-08-27 10:54:09

C# const和st

2011-05-07 14:15:39

工作站PC

2011-07-06 14:12:14

Objective-C

2011-03-29 13:45:55

HTMLCSSjavascript

2011-04-21 15:26:46

喷墨打印

2010-09-09 15:25:35

网络协议

2017-08-01 00:19:15

Javascript函数函数声明

2009-08-10 14:55:04

C#定义Nullabl

2011-06-28 10:55:20

C#接口抽象类

2012-04-05 10:42:08

智能布线传统布线网络布线

2024-03-14 11:27:16

C++变量编程

2010-05-13 17:00:50

Subversion安

2021-05-19 09:01:37

Pythonurllib库requests库

2011-08-17 11:15:22

Objective-C语法
点赞
收藏

51CTO技术栈公众号