在平凡中也会有很多的快乐;有梦想,人才不会孤单
学会放弃~
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

extern关键字

Posted on 2005-12-29 12:55  情走边锋  阅读(750)  评论(0编辑  收藏  举报
from 《thinking in c++》
首先,必须知道“声明”和“定义”之间的区别,因为这两个术语在全书中会被确切地使
用。“声明”向计算机介绍名字,它说,“这个名字是什么意思”。而“定义”为这个名字分配
存储空间。无论涉及到变量时还是函数时含义都一样。无论在哪种情况下,编译器都在“定义”
处分配存储空间。对于变量,编译器确定这个变量占多少存储单元,并在内存中产生存放它们
的空间。对于函数,编译器产生代码,并为之分配存储空间。函数的存储空间中有一个由使用
不带参数表或带地址操作符的函数名产生的指针。
定义也可以是声明。如果该编译器还没有看到过名字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 i    /*声明但没定义*/
extern float func(float f)    /*函数的声明,没有定义*/
float f       /*声明并且定义*/
float func(float f) {    /*函数定义*/
    return f+1.0;
}
int h(int a) {    /*声明和定义*/
    return a+10;
}
在函数声明时,参数名可给出也可不给出。而在定义时,它们是必需的。这在C语言中确
实如此,但在C + +中并不一定。
科为网络安全