C++中的声明与定义
声明
声明不分配内存空间,声明只是告诉编译器存在一个名字是xx的变量、函数、结构体等等。
声明一般写在头文件中。
定义
定义分配内存空间,声明的变量、函数、结构体等就可以在程序中使用了。
声明一般写在源文件中。
(3)变量
int a; //(1)
int b=1; //(2)
在C中,(1)没有进行初始化,将其视为单纯的声明或者“临时性定义”。(2)进行了初始化,实际分配了内存空间,将其视为定义。
在C++中,没有“临时性定义”的概念,上述两种情况都视为定义。
因此,对于一般的局部变量,区分声明和定义并没有实际性的意义。真正有意义的声明是extern int a;等特殊变量的声明。
对一个变量的声明可以出现多次,如外部变量,在每个用到该变量的文件都应该进行声明;对一个变量的定义只能有一次。
声明和定义是完全同的概念,声明是告诉编译器“这个函数或者变量可以在哪找到,它的模样像什么”。而定义则是告诉编译器,“在这里建立变量或函数”,并且为它们分配内存空间。
函数声明与定义:
函数的声明如:int Add(int, int);函数声明就是给函数取名并指定函数的参数类型,返回值类型。值得注意的是,在C语言中,有一点跟C++不同,对于带空参数表的函数如:int func();在C中代表可以带任意参数(任意类型,任意数量),而在C++中代表不带任何参数。
函数的定义如:int Add(int a, int b){} 函数定义看起来跟函数声明很像,但是它有函数体,如果函数体中使用了参数,就必须为参数命名,这里大括号代替了分号的作用。
变量的声明如:extern int i; 在变量定义前加extern关键字表示声明一个变量但不定义它,这对函数同样有效,如:extern int Add(int a, int b);因为没有函数体,编译器必会把它视作声明而不是定义,extern关键字对于函数来说是多余的,可选的。
变量的定义如:int i;如果在此之前没有对i的声明,那么这里既是对它的声明也是对它的定义,编译器会为其分配对应的内存。