对宣言感到困惑,定义

时间:2017-07-24 09:20:10

标签: c++

在C ++ Primer一书中,它指出: 变量定义由类型说明符组成,后跟由逗号分隔的一个或多个变量名称的列表,以分号结尾。 列表中的每个名称都具有由类型说明符定义的类型。 定义可以(可选地)为其定义的一个或多个名称提供初始值。

现在我的困惑是,我一直认为对于内置类型,如int,double,float等。如果我没有明确初始化变量,那么这只是声明。例如:

int a;      //i thought that this would just be a declaration  
int a = 45; //while built-in types with explicit initialization would be a  
            //definition  

特别是,由于默认初始化声明: 未定义内置类型的未初始化变量的值。 (在函数内部时)

然而这本书说:

int a;     //is a definition (both a declaration and definition)  
int b;     //is a definition. yet the variable b is undefined.  

所以现在我对什么构成宣言和什么感到困惑 构成定义?如果有和没有明确的初始化不是决定因素。

我知道函数/类的声明和定义之间的区别。要在多个文件中使用函数/类,需要与函数定义分开的声明。 我们在一个文件(头文件)中定义函数的地方。并且使用该函数/类的其他文件在使用该类/函数时必须声明(不定义)。

另外,我知道:
声明指定变量的类型和名称,并使程序知道名称。 同时,定义创建关联实体并为该特定变量分配存储。

但是,当内置类型出现定义与声明时,我仍有点疑惑。基本上所有带或不带初始化器的内置类型都是声明和定义? 例如:

int x;  
double y;  
char z;  
float g;  

2 个答案:

答案 0 :(得分:1)

int a;既是声明(可以使用变量)又是定义(它有自己的内存),但如果它是自动变量,则不会初始化。

extern int a;仅仅是一个声明而不是定义。

答案 1 :(得分:-2)

来自here

  

大多数情况下,当您声明变量时,您也提供了变量   定义。准确定义变量意味着什么?它   意味着您要告诉编译器在哪里创建存储   那个变量。例如,如果你写:

int x;
int main()
{
    x = 3;
}
     

行int x;都声明并定义变量;它有效   说,"创建一个名为x的变量,类型为int。另外,存储为   变量是它是在对象中定义的全局变量   与此源文件关联的文件

这是与您的问题更相关的网站的一部分 请参阅链接,以便进一步澄清您的误解 http://www.cprogramming.com/declare_vs_define.html