三、const作为全局变量
在程序中,我们要尽可能少的使用全局变量。因为其作用域是全局,所以程序范围内都可以修改它的值,从而导致了全局变量不能保证值的正确性,如果出现错误非常难以发现。如果在多线程中使用全局变量,你的程序将会错的一塌糊涂。多线程会修改另一个线程使用的全局变量的值,如果不注意,一旦出错后果不堪设想。所以在这种情况下万不得意不要使用全局变量。我们要尽可能多的使用const。如果一个全局变量只在本文件中使用,那么用法和前面所说的函数局部变量没有什么区别。如果它要在多个文件间共享,那么就牵扯到一个存储类型的问题。
有两种方式。
1、用extern
例如
/* pi.h */
extern const double pi;
/* pi.c */
const double pi=3.14;
然后其他需要使用pi这个变量的,包含pi.h
#include pi.h
或者,自己把那句声明复制一遍就好。这样做的结果是,整个程序链接完后,所有需要使用pi这个变量的共享一个存储区域。
2、使用static,静态外部存储类
/* constant.h */
static const double pi=3.14;
需要使用这个变量的*.c文件中,必须包含这个头文件。前面的static一定不能少。否则链接的时候会报告说该变量被多次定义。这样做的结果是,每个包含了constant.h的*.c文件,都有一份该变量自己的copy,该变量实际上还是被定义了多次,占用了多个存储空间,不过在加了static关键字后,解决了文件间重定义的冲突。坏处是浪费了存储空间,导致链接完后的可执行文件变大。通常来说,对于存储空间字节的变化不是太大的情况下,不是问题。好处是,你不用关心这个变量是在哪个文件中被初始化的。
下面再来看看一段代码:
#include <stdio.h> int main() return 0; |
为了便于代码的阅读理解,在此就直接在代码后面加注释,就不在这儿做过多的讲解了。
综上所述,const 的好处,是引入了常量的概念,让我们不要去修改不该修改的内存。直接的作用就是让更多的逻辑错误在编译期被发现。所以我们要尽可能的多使用const。以上内容难免有错,如果错误,请纠正!如需转载,请注明出处!
相关链接: