本文目录一览:
- 1、C语言 在头文件中声明静态变量 如何被其他文件使用
- 2、头文件定义静态变量会有什么后果
- 3、c程序头文件中变量一定要定义为static类型吗?
- 4、在C/C++头文件中定义函数时使用static关键字的那些事
- 5、static函数在头文件中定义有什么好处么
- 6、头文件中定义的全局变量和静态全局变量有区别吗
C语言 在头文件中声明静态变量 如何被其他文件使用
尽量不要使用静态全局变量, 除非特别需要(全局变量用于需要在main函数启动前就可用). 要注意在头文件中使用头文件保护符#ifndef , 防止重复声明. 全局变量的声明都要在所有函数之外.
for example:
A.h: 定义声明 int X;
A.c: 初始化 static int X=???;
在B. c或B.h中使用: #include "A.h"
引用声明 extern int X;
头文件定义静态变量会有什么后果
静态变量一般有两种,静态局部变量,定义在函数内部,但函数运行结束后,它仍然存在。另外就是静态全局变量,这种全局变量申明时,加了static,该变量只能在本文件中被引用,不能被其他程序引用。你说的那种头文件定义静态变量,应该属于第二种。-头文件定义静态变量
c程序头文件中变量一定要定义为static类型吗?
没这说法
int a ;
int main()
{
int b ;
int c* = (int *)malloc(sizeof(int));
}
a是全局变量,b是栈变量,c是堆变量。
static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。
static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束了。但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。-头文件定义静态变量
在C/C++头文件中定义函数时使用static关键字的那些事
首先,如果在头文件中定义一个普通的函数,比如下面这样,肯定会在程序链接的时候报“ 重复定义 ”的错误。
那么如果我们想在头文件中定义一些常用的函数,一般做法是在函数前加“ inline ”关键字,这样就不会报“ 重复定义 ”的错误了,并且能够像函数一样被其他的c/cpp源码文件调用了。
这时候如果你在inline后面加入“static”关键字也是没问题的:
区别是: 加了static关键字后,每个调用它的c/c++源码文件都会有一个copy,即static其实是限制了函数的作用域在本源码文件内。
----------------------------------- 分割线 ----------------------------------------
那么另一个问题来了:如果我们在函数内部定义static变量时,会是怎么样的情况呢?
如果我们分别在1.cpp和2.cpp两个源码文件中分别调用这两个inline函数,可以通过结果看到区别。
程序运行结果:
可以看到: 如果在inline后加了static关键字,则在函数中定义的static变量则会在每一个源码调用文件中产生了一个拷贝,而没加static关键字的inline函数则会产生一个全局的static变量。 -头文件定义静态变量
具体解释参考
static函数在头文件中定义有什么好处么
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。-头文件定义静态变量
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件-头文件定义静态变量
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
头文件中定义的全局变量和静态全局变量有区别吗
有,
头文件中定义的全局变量
在其他文件中只要包含其头文件就可以用
静态全局变量只能在该文件使用