C 语言 static 变量和函数

我们知道,全局变量和函数的作用域默认是整个程序,也就是所有的源文件,这给程序的模块化开发带来了很大方便,让我们能够在模块 A 中调用模块 B 中定义的变量和函数,而不用把所有的代码都集中到一个模块。

但这有时候也会引发命名冲突的问题,例如在 a.c 中定义了一个变量 n,在 b.c 中又定义了一次,链接时就会发生重复定义错误,原因很简单,变量只能定义一次。

如果两个文件都是我们自己编写的或者其中一个是,遇到这样的情况还比较好处理,修改变量的名字即可;如果两个文件都是其他程序员编写的,或者是第三方的库,修改起来就颇费精力了

实际开发中,我们通常将不需要被其他模块调用的全局变量或函数用 static 关键字来修饰,static 能够将全局变量和函数的作用域限制在当前文件中,在其他文件中无效。下面我们通过一个实例来演示。

module.c 源码:

1. #include 
2.
3. static int n = 999;
4.
5. static void say(){
6. printf("Hello World!\\n");
7. }
1. #include 
2.
3. int n = 100;
4.
5. void say(){
6. printf("hello world\\n");
7. }
8.
9. int main(){
10. say();
11. printf("n = %d\\n", n);
12. return 0;
13. }

运行结果:

hello world n = 100

你可能感兴趣的:(C语言,c语言,c++,算法)