C陷阱与缺陷(四)--声明与定义
2017-03-05 12:02
204 查看
变量的定义&声明
<1>一种是需要建立存储空间的。例如:int a
在声明的时候就已经建立了存储空间,也就是我们所说的定义。
<2>另一种是不需要建立存储空间的。 例如:extern int a
其中变量a是在别的文件中定义的。 告诉编译器,这个名字已经匹配到一块内存上了,别的地方再也不能用它来作为变量名或对象名。声明可以出现多次。
全局变量问题
(1)、C/C++中的变量分为全局变量、静态全局变量、局部变量和静态局部变量, 简单一点说,全局变量就是在函数外面定义的变量。
(2)、全局变量只要在一个文件中定义后,在其他需要使用的源文件中只要使用extern关键字,即可在该文件中使用,用static修饰的局部变量只能在定义变量的函数中使用,那么用static修饰的全局变量也就只能在定义其的文件中使用了,这就是传说中的静态全局变量。
(3)、把多个全局变量封装到一个结构里吧, 可以减少全局变量的数量。通过传递参数、返回值、回调函数来代替全局变量。如果参数过多,可以定义结构体参数,复杂点的作法还有使用全局队列、全局查找表等。
(4)、全局变量最大的优点就是它最大的缺点。如果使用太多的全局变量会使代码编写和维护变得非常困难。。因为所有函数都有肯能去影响它
而且是代码变得非常不稳定。因此定义C变量要有C++私有变量的意识。不然整个软件框架维护极其的困难!
函数的定义&声明
声明:一般在头文件里,对编译器说:这里我有一个函数叫function() 让编译器知道这个函数的存在。声明是告诉编译器有这么个变量,但并不实现。
定义:就是实现这个变量,真正在内存(堆或栈中)为此变量分配空间。定义一般在源文件里,具体就是函数的实现过程,写明函数体。
2> 在代码比较少,所有的代码都可以保存在一个.c源文件中。但是,在实际开发过程中,项目做大了,源代码肯定非常多,很容易就上万行代码了。这个时候如果把所有的代码都写到一个.c源文件中,那么这个文件将会非常庞大,也非常恶心,你可以想象一下,一个文件有十几万行文字,不要说调试程序了,连阅读代码都非常困难。
3> 为了模块化开发,一般会将不同的功能写到不同的.c源文件中,这样的话,每个开发人员都负责修改不同的源文件,达到分工合作的目的,能够大大提高开发效率,并且维护也方便。
<1>一种是需要建立存储空间的。例如:int a
在声明的时候就已经建立了存储空间,也就是我们所说的定义。
<2>另一种是不需要建立存储空间的。 例如:extern int a
其中变量a是在别的文件中定义的。 告诉编译器,这个名字已经匹配到一块内存上了,别的地方再也不能用它来作为变量名或对象名。声明可以出现多次。
全局变量问题
(1)、C/C++中的变量分为全局变量、静态全局变量、局部变量和静态局部变量, 简单一点说,全局变量就是在函数外面定义的变量。
(2)、全局变量只要在一个文件中定义后,在其他需要使用的源文件中只要使用extern关键字,即可在该文件中使用,用static修饰的局部变量只能在定义变量的函数中使用,那么用static修饰的全局变量也就只能在定义其的文件中使用了,这就是传说中的静态全局变量。
(3)、把多个全局变量封装到一个结构里吧, 可以减少全局变量的数量。通过传递参数、返回值、回调函数来代替全局变量。如果参数过多,可以定义结构体参数,复杂点的作法还有使用全局队列、全局查找表等。
(4)、全局变量最大的优点就是它最大的缺点。如果使用太多的全局变量会使代码编写和维护变得非常困难。。因为所有函数都有肯能去影响它
而且是代码变得非常不稳定。因此定义C变量要有C++私有变量的意识。不然整个软件框架维护极其的困难!
函数的定义&声明
声明:一般在头文件里,对编译器说:这里我有一个函数叫function() 让编译器知道这个函数的存在。声明是告诉编译器有这么个变量,但并不实现。
定义:就是实现这个变量,真正在内存(堆或栈中)为此变量分配空间。定义一般在源文件里,具体就是函数的实现过程,写明函数体。
多个源文件好处
1> 在编写的所有C语言代码都保存在拓展名为.c的源文件中,编写完毕后就进行编译、链接,最后运行程序。2> 在代码比较少,所有的代码都可以保存在一个.c源文件中。但是,在实际开发过程中,项目做大了,源代码肯定非常多,很容易就上万行代码了。这个时候如果把所有的代码都写到一个.c源文件中,那么这个文件将会非常庞大,也非常恶心,你可以想象一下,一个文件有十几万行文字,不要说调试程序了,连阅读代码都非常困难。
3> 为了模块化开发,一般会将不同的功能写到不同的.c源文件中,这样的话,每个开发人员都负责修改不同的源文件,达到分工合作的目的,能够大大提高开发效率,并且维护也方便。
相关文章推荐
- C陷阱与缺陷(四)--声明与定义2
- C陷阱与缺陷-变量的定义位置
- C陷阱与缺陷中的一个问题——signal函数声明的剖析
- 读《C缺陷与陷阱》之-函数声明理解
- 那么你分得清变量的定义与声明吗?
- 声明和定义的区别
- C++类<一>:类的定义和声明&类的作用域
- Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)
- 声明和定义
- The New C++ -- 变量(1. 变量的声明和定义)
- C陷阱与缺陷 1
- C++编译与链接(0)-.h与.cpp中的定义与声明
- 声明与定义
- 声明和定义的区别
- 遍历json对象的属性和值,并循环动态定义声明变量
- 谈谈C语言中函数定义/声明冲突时的处理
- [美]Andrew Koenig -C陷阱与缺陷 - 更新顺序文件
- 【Java】变量声明、定义、赋值与初始化区别
- <<C 陷阱与缺陷>>读书笔记
- 在类模板的声明和定义中把.h与.cpp分离