网站首页 > 基础教程 正文
在C程序开发过程中,很多人都忽视了静态变量和静态函数重大作用。笔者就遇到一位资深程序员,看到我写的代码里有static标识,很好奇,我告诉他后,他立马用到他程序里面了~~。
根据static修饰的对象,可分为两大类:在函数前面的和在变量前面的。
1. 放在函数前面
在实际项目中,我们经常会定义这样一些小函数,它们只被定义他们的那个文件里的其它函数调用,而不会被其它文件里的函数调用,即局部函数。建议要这样的函数前要加static,表明此函数的作用范围是本文件,也只能在本文件中使用,当然头文件中也是不能出现这个函数申明的,否则会报错。
来看一个例子,同一个项目包含file1.c和file2.c
//file1.c中
int add(int x, int y) { return (x+y); } void int funFile1(void) { return add(1, 2); }
//file2.c中
float add(float x, float y) { return (x+y); } void float funFile2(void) { return add(1.1, 2.1); }
很明显,编辑时会报add函数重复定义的错误。现在我们在add前面加上static试试。
//file1.c中
static int add(int x, int y) { return (x+y); }
//调用本文件中static函数
void int funFile1(void) { return add(1,2); }
//file2.c中
static float add(float x, float y) { return (x+y); }
//调用本文件中static函数
void float funFile2(void) { return add(1, 2); }
编辑通过,完全正确。说明在同一个项目中,不同文件中含有相同名字的static函数是允许的。这个功能在多人合作的大项目中,特别有用,只要大家定义好接口函数,可以极大的避免同文件名的错误。
2.放在变量前面
分在函数内和在函数外两种情况,关于Static变量在内存中的位置,详见关于内存堆栈
2.1 函数内的static变量
函数内的static变量只能被本函数调用,其特点是只能被初始化一次,而且,退出函数后其值会保持,限于函数内的“全局”变量.
//每调用一次,val值增1 void int getCount(void) { //编辑时完成初始化值为1 static int val=1; val++; return val; }
2.2 函数外的static变量
定义在函数外的static变量只能被本文件中的函数使用,不能被其它文件使用。来看例子,同一个项目包含file1.c和file2.c
//file1.c
//编辑时完成初始化值为1 //与file2中的val没关系 static int val=1; void int incCount(void) { val++; return val; } //静态函数 (限file1.c) static void int decCount(void) { val--; return val; }
//file2.c
//编辑时完成初始化值为10 //与file1中的val没关系 static int val=10; void int inc(void) { val++; return val; } //静态函数 (限file2.c) static void int decCount(void) { val--; return val; }
编译通过,完全正确。同一项目中的不同文件含有同名静态变量允许存在,其作用域与静态函数一致。
码字不易,谢谢关注,你的点赞是我最大的动力。共享知识,共同成长!
猜你喜欢
- 2024-10-12 C++中override与overload的区别:深入解析与应用
- 2024-10-12 C++中的static_cast #程序代码 c++ static用法
- 2024-10-12 为什么C++ 单例局部static初始化是线程安全的?
- 2024-10-12 编码规范-C++:尽可能使用static_cast而不是reinterpret_cast
- 2024-10-12 C++类对象中的this指针与静态成员:理解与应用
- 2024-10-12 看完就会用的C++17特性总结 c++ 17 新特性
- 2024-10-12 C++|变量的类型系统和属性 c++变量有哪几种作用域
- 2024-10-12 C++友元和静态函数:如何用特殊的方式访问和管理类的成员
- 2024-10-12 C++中的static关健字 c static关键字
- 2024-10-12 C++静态成员变量和静态成员函数使用总结
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)