C++中变量、函数的声明和定义以及调用C函数( 多文件变量;extern修饰变量;const修饰变量)
1 变量的定义:
变量的定义为变量分配空间;变量在使用前必须有且只有一个定义的地方;在源文件中定义变量。
类型名 变量名;
类型名 变量名1,变量名2;
例如下面语句定义了5个变量:
int i1;double d2,d3;std::string title;Sales_item curr_book;
1.1 变量的初始化
初始化是变量定义的一种。变量的初始化包括两种:显示初始化和隐式初始化。
显示初始化一个变量有两种方法:
int ival(1024);//直接初始化调用含参数的构造函数
int ival=1024;//复制初始化,调用复制构造函数
隐式初始化取决于变量定义的位置和变量的类型,内置类型变量的初始化取决于变量定义的位置,在函数体外定义的变量初始化为0,在函数体内部没有自动初始化。类类型的对象初始化有类的构造函数决定,没有定义则编译器自动生成一个默认构造函数用于自动初始化。
2 变量的声明:
只声明而不定义变量需要使用extern关键字。变量的声明可以多次。
在一个文件中定义的变量,在其他文件中使用时需要在其他文件中加以声明。
当变量的声明放在头文件中时,包含了头文件也就包含了变量的声明。
2.1变量的声明与const
const变量在定义时,默认是局部于定义它的文件的局部变量,不能被其他文件访问,必须在定义时使用extern定义const变量表明可以被其他文件访问,另外在其他文件中使用时用extern声明来使用(或者包含一个头文件,头文件中包含了const变量的声明)。
非const变量默认就是extern的,可以被其他文件访问。所以在定义时不需要加extern。只是其他文件在使用时需要声明。
3 函数的声明:
函数的声明不像变量的声明那样要有extern,函数的声明如下:
返回类型 函数名(形参列表);
函数的声明和定义使用方法同变量的声明和定义。
4 C语言函数在C++语言中的声明
由于C++语言支持函数重载,编译器对一个函数编译后其实另外命了名。这个在C语言中不同,C语言中函数在编译后名字还是原来的名字。所以当C++语言调用C语言的文件中定义的函数(在VS中以.c后缀文件中定义的函数)时也要声明,只不过这是的声明和C++语言对函数的声明不同,而是嗦了一点:
extern "C" 返回类型 函数名(形参列表);
例如:
1 在头文件a.h中声明一个int变量:
extern int ix;
2 在源文件a.cpp中定义变量
#include“a.h”
int ix=1;
3 在main中声明多文件变量
#include"a.h"
extern int ix;
//这里你如果直接使用ix不声明也是可以的,因为它已经在源文件中被定义,在main的源文件中包含了头文件。声明只是说明已经有了这个变量,只不过它在其他文件中,你可以使用它的名字。
1在func.c中定义了一个C函数
int add(int a,int b)
{
return a+b;
}
2 在main所在文件中加入声明
extern "C" int add(int a,int b);
即可正常使用add