在C/C++中, 局部变量按照存储形式可分为三种auto, static, register.
本文主要是分析static修饰函数时的作用:
(1) static修饰符可以使函数仅在当前模块(文件)中有效,外部模块无法调用static修饰的函数;
如果全局存在同名的函数,则static会屏蔽掉全局函数,相当于在当前模块中重载这个函数.
例如hello.c 和 main.c 两个文件中的 helloworld() 函数.
这个程序的输出结果是:I am static.
/* 文件hello.c: */ #include <stdio.h> void helloworld() { printf("Hello World!""\n"); }
/* 文件main.c: */ #include <stdio.h> static void helloworld() { printf("\nI am static.\n"); } int main() { helloworld(); return 0; }
|
(2) 以上面的两个源文件为例,如果在main函数中去掉static关键字(修饰符),或者添加一行"extern void helloworld", gcc在编译时都会出错:multiple definition of `helloworld'.补充一点,没有static修饰的函数默认是extern的.
(3) static修饰符的应用难点在于“多线程编程”和“面向对象编程”. 本文不对此进行分析.
阅读(2646) | 评论(0) | 转发(0) |