最近在做项目时,发现在实现一些接近操作系统底层功能的时候,显得力不从心啊,而且在项目中用了一很多第三方的东西,很大一部分与硬件在打交道,觉得有必须重新温习一下c++(抛弃“她”三年了啊),想想还是重归于好吧!
特以此次“旅行”来记录我曾经失去的美好! 废话不多说,写吧!
概念重温 :"声明"与“定义”
这二个概念有必须解释一下 ,首先,必须知道“声明”和“定义”之间的区别,因为这两个术语在经常出现在我们平时的talking中,有责任去明白她们。
“声明”向计算机介绍名字,它说,“这个名字是什么意思”。
“定义”为这个名字分配存储空间。
无论涉及到变量时还是函数时含义都一样。无论在哪种情况下,编译器都在“定义”处分配存储空间。对于变量,编译器确定这个变量占多少存储单元,并在内存中产生存放它们的空间。对于函数,编译器产生代码,并为之分配存储空间。函数的存储空间中有一个由使用不带参数表或带地址操作符的函数名产生的指针。
另外,定义也可以是声明。如果该编译器还没有看到过名字A,程序员定义int A,则编译器马上为这个名字分配存储地址。声明常常使用于e x t e r n关键字。如果我们只是声明变量而不是定义它,则要求使用e x t e r n。对于函数声明, e x t e r n是可选的,不带函数体的函数名连同参数表或返回值,自动地作为一个声明。
函数原型包括关于参数类型和返回值的全部信息。int f(float,char);是一个函数原型,因为它不仅介绍f这个函数的名字,而且告诉编译器这个函数有什么样的参数和返回值,使得编译器能对参数和返回值做适当的处理。C + +要求必须写出函数原型,因为它增加了一个重要的安全层。
下面是一些声明的例子。
extern int varible;
//声明函数
extern float foo(float,float);
float b;
float c;
//定义函数
float foo(float a,float b)
{
return a + b;
}
//定义整型变量
int varible;
//定义函数
int h(int x)
{
return x + 1;
}
void main(int argc, _TCHAR* argv[])
{
varible = 2;
b = 1.0;
c = 2.3;
foo(b,c);
h(varible);
}
在函数声明时,参数名可给出也可不给出。而在定义时,它们是必需的。这在C语言中确实如此,但在C + +中并不一定。
其实很简单,总结起来就是:声明不分配内存空间,定义则相反,定义可以是声明,但声明一定不是定义!