C语言细节之定义与声明

来源:互联网 发布:索罗斯做空人民币 知乎 编辑:程序博客网 时间:2024/05/22 05:52
什么是定义什么是声明,似乎这俩个东西一样但是又有所区别,思考一下,如果你不能直接说出这二者的根本区别,那么本文对你还是有点用处的。
首先什么是定义?《C++Primer》第四版 2.3.5节中这么说到:

①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。

②变量声明:用于向程序表明变量的类型和名字。

③定义也是声明:当定义变量时我们声明了它的类型和名字。

④extern关键字:通过使用extern关键字声明变量名而不定义它。

这样就很清楚了,所谓定义就是创建一个对象,为这个对象分配一块内存并给这块内存命名。从此这个变量名和这块内存地址就绑定了,并且这块

内存地址的位置也不能改变。一个变量或对象在一定的区域内只能定义一次,如果被多次定义,编译器会提示重复定义。

声明比较复杂,声明的第一重含义是告诉编译器这个名字已经匹配到到一块内存带上上了,下面的代码用到的变量已经在别的地方定义了。

第二重含义是告诉编译器这个名字我先预订了,别的地方不能再使用这个名字。这种用法最典型的就是void fun(int i,int c).

1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方定义了。

例如:extern int i; //声明,不是定义

             int i; //声明,也是定义           

2.如果声明有初始化式,就被当作定义,即使前面加了extern。只有当extern声明位于函数外部时,才可以被初始化。

例如:extern double pi=3.1416;  //定义

3.函数的声明和定义区别比较简单,带有{ }的就是定义,否则就是声明。

例如:extern double max(double d1,double d2);  //声明

4.除非有extern关键字,否则都是变量的定义。

例如:extern int i; //声明

             int i; //定义      

程序设计风格注意:

    1. 不要把变量定义放入.h文件,这样容易导致重复定义错误。

    2. 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。

    3. 可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量。

0 0
原创粉丝点击