定义和声明

变量的定义:为变量分配存储空间,还可以指定初始值。定义是“在这里建立变量”或“在这里建立函数”。对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存其数据,对于函数,编译器会生成代码,这些代码最终也要占用一定的内存。变量仅有一个定义。定义也是声明。

变量的声明:表明变量的类型和名字。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。

1.通过使用extern声明变量而不定义它。

2.如果声明有初始化式,即使加了extern都被当做定义。只有当extern声明位于函数外部时,才可以被初始化。例如:extern double pi=3.14.

3.不要把定义放在.h文件,这样会导致重复定义的错误。但是const变量的定义可以放在头文件中;类的定义也可以放到头文件中;inline函数也可以放在头文件中。原因如下:

类定义是因为编译器需要它们的定义来产生代码。为了产生能定义和使用类的对象的代码,编译器需要知道组成该类的数据成员和可以执行的操作。类定义提供了这些信息,所以需要在头文件中定义。

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

4.尽量使用static把定义限制在该源文件作用域。

(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。

(2)外部变量用static来声明,则该变量的作用只限于本文件模块。

5.基本类型变量的声明和定义(初始化)是同时产生的;而对于对象来说,声明和定义是分开的。

例如:类A。如果A a;就是一个声明,告诉编译器a是A类的一个对象变量,但是不进行初始化;如果以后a=new A();这就是初始化,分配了空间。

时间: 2024-10-12 17:48:57

定义和声明的相关文章

C语言变量的定义和声明

今天犯了一个低级的错误,在头文件中定义了一个变量,而该头文件被多个源文件调用,导致该变量重复定义.然后我就把改变量改成static类型的了,这下编译倒是不出错了,就是结果跟我想象的不一样,在一个文件中改了,而在另一个文件用的时候,结果为0. 然后发现这个错误好低级,正确的用法是在源文件中定义,在头文件中声明,而别的源文件想用,就引用该头文件. 我们来说说定义和声明的关系: 定义:指有这么个东西,而且就放在这. 声明:仅仅指有这么个东西,它是在别的文件中定义的. 所以定义只能一次,而声明是可以多次

定义与声明

C++声明和定义的区别 收藏 <C++Primer>第四版 2.3.5节中这么说到: ①变量定义:用于为变量分配存储空间,还可为变量指定初始值.程序中,变量有且仅有一个定义. ②变量声明:用于向程序表明变量的类型和名字. ③定义也是声明:当定义变量时我们声明了它的类型和名字. ④extern关键字:通过使用extern关键字声明变量名而不定义它. 1.定义也是声明,extern声明不是定义,即不分配存储空间.extern告诉编译器变量在其他地方定义了. 例如:extern int i; //声

C++编译与链接(0)-.h与.cpp中的定义与声明

C++中有的东西需要放在可以在.h文件中定义,有的东西则必须放在.cpp文件中定义,有的东西在不同的cpp文件中的名字可以一样,而有的则不能一样 那么究竟哪些东西可在头文件中定义,声明,哪些东西又必须在.cpp中定义,声明呢? *以下所有的讨论都是在全局命名空间中(即不定义自己的namespace)下进行的 函数 1.在.h中只能声明函数,在.cpp中可以声明与定义函数 如果在.h中声明并定义一个函数,则该函数只能被#include一次,否则则会出现重定义错误 比如 1.h #pragma on

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 看一下Sales_item类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_pr

变量定义和声明的差别(整理)

变量的声明有两种情况: 1.一种是须要建立存储空间的.比如:int a 在声明的时候就已经建立了存储空间. 2.还有一种是不须要建立存储空间的. 比如:extern int a 当中变量a是在别的文件里定义的. 声明是向编译器介绍名字--标识符.它告诉编译器"这个函数或变量在某处可找到,它的模样象什么". 而定义是说:"在这里建立变量"或"在这里建立函数".它为名字分配存储空间.不管定义的是函数还是变量,编译器都要为它们在定义点分配存储空间.对于

C语言指针与数组的定义与声明易错分析

部分摘自<C语言深度解剖> 1.定义为数组,声明为指针 在文件1中定义: char a[100]; 在文件2中声明: extern char *a; //这样是错误的 这里的extern告诉编译器a这个名字已经在别的文件中被定义了,下面的代码使用的a是在别的文件中定义的.编译器是按文件分别编译的,当a被声明为char* a时,编译器理所当然的认为a是一个指针变量,在32位系统下占用4个byte,这4个byte存放的是地址,地址指向的空间存储的是char类型数据. 程序会返回SIGSEGV. 2

模板类成员函数的定义和声明为什么要放在一个文件中

"通常情况下,你会在.h文件中声明函数和类,而将它们的定义放置在一个单独的.cpp文件中.但是在使用模板时,这种习惯性做法将变得不再有用,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明.因此,最好的办法就是将模板的声明和定义都放置在同一个.h文件中.这就是为什么所有的STL头文件都包含模板定义的原因."[1] "标准要求编译器在实例化模板时必须在上下文中可以查看到其定义实体:而反过来,在看到实例化模板之前,编译器对模板的定义体是不处理的--原因很简单

C++ Primer 学习笔记_47_类与数据抽象 --类的定义和声明【上】

类 --类的定义和声明[上] 引言: 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 一个前面曾经定义过的类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_price() const; bool sam

C++ Primer 学习笔记_48_类与数据抽象 --类的定义和声明【下】

类 --类的定义和声明[下] 三.关于类定义的更多内容[接上] //P374 习题12.8 class Sales_item { public: double avg_price() const; bool same_isbn(const Sales_item &rhs) const { return rhs.isbn == isbn; } Sales_item():units_sold(0),revenue(0){} private: std::string isbn; unsigned un

c++总结之类型,对象的定义和声明,对象的初始化和赋值

一.对象的类型 对象的类型决定了对象占用内存空间的大小,和内存的布局,内存中可存储值的范围以及对该对象可以进行的操作,由于对象的类型决定可以对其执行的操作,因此const属性也可以看做对象类型的组成部分.类型又分为静态类型和动态类型,对于普通对象,静态类型和动态类型一般是一致的:对于指针和引用类型,静态类型和动态类型可以相同也可以不同,静态类型是指针和引用定义时声明的类型,而动态类型是指程序运行时实际绑定的类型.当静态类型和动态类型不同时,一般来说有两种情况:一是指涉到常量的指针和引用绑定了一个