C语言系列——static关键字

C语言系列——static关键字

常见用法有三种:

1:用于局部变量的修饰符;

2:用于全局变量的修饰符;

3:用于函数的修饰符。

1、用于局部变量的修饰符

当 static 用于修饰局部变量时,通常是在某个函数体内,只能在该函数内被调用,这样的变量称为局部静态变量。

  • 它的值不会因为函数调用的结束而被清除,当函数再次被调用时,它的值是上一次调用结束后的值。
  • 变量在程序加载时创建,在程序终止时结束。
  • 只在编译时初始化一次。如果没有显式初始化,默认初始化为0。
#include <stdio.h>

void trystat(void);

int main(void)
{
   int count;
   for (count = 1; count <= 3; count++)
   {
       printf("Here comes iteration %d:\n", count);
       trystat();
   }
   
   return 0;
}


void trystat(void)
{
   int fade = 1;
   static int stay = 1;
   
   printf("fade = %d and stay = %d\n", fade++, stay++);
}

程序执行结果
Here comes iteration 1:
fade = 1 and stay = 1
Here comes iteration 2:
fade = 1 and stay = 2
Here comes iteration 3:
fade = 1 and stay = 3

(1) 这里变量stay ,它从程序加载时开始存在,直到程序终止。但是它的范围仅限于trystat()函数块。只有当这个函数执行时,程序才能使用stay访问它指定的对象。
(2) 变量stay记得它的值增加了1,但是变量fade每次都会重新开始。这指出了初始化的不同之处:fadetrystat()每次调用都从新初始化,而stay变量只初始化一次。
(3) 静态变量在程序加载到内存之后就已经就位了。将语句static int stay = 1;放在trystat()函数中告诉编译器,只允许trystat()函数查看变量;它不是在运行时执行的语句。

2、用于全局变量的修饰符

关键字 static 还可用于修饰全局变量,该变量在某一个文件中变量,但不属于任何一个函数内,这样的变量通常称为静态全局变量

  • 静态全局变量的存储位置、初始化操作同静态局部变量的特性,但其作用域有所不同;
  • 静态全局变量可以被该文件内的所有函数访问,但不能被其它文件内的函数访问。

3、用于函数的修饰符

关键字 static 还可以用于修饰一个函数,这样的函数称之为静态函数。定义一个静态函数就是在函数的返回类型前加上 static 关键字。

  • 静态函数的作用域限制在当前定义的文件中使用,从而避免了多文件函数名称冲突的可能性。
  • 通常文件中不作为接口的函数,建议使用static修饰,这样避免不同文件使用相同的函数名发生冲突。
/**
 * @brief  在ILI9341显示器上以某一颜色填充像素点
 * @param  ulAmout_Point :要填充颜色的像素点的总数目
 * @param  usColor :颜色
 * @retval 无
 */
static __inline void ILI9341_FillColor ( uint32_t ulAmout_Point, uint16_t usColor )
{
	uint32_t i = 0;
	
	
	/* memory write */
	ILI9341_Write_Cmd ( CMD_SetPixel );	
		
	for ( i = 0; i < ulAmout_Point; i ++ )
		ILI9341_Write_Data ( usColor );	
}

以上代码为stm32控制LCD液晶显示器的一个函数。

函数ILI9341_FillColor()是静态函数,只能被当前文件中的其他函数调用,而不能被其他文件的外部函数调用,即不能作为接口函数。

猜你喜欢

转载自blog.csdn.net/Healer19/article/details/111991484