在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;
答案 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