C语言中static关键字作用

作者: 7ee72f98ad17 | 来源:发表于2019-07-28 21:24 被阅读0次

static修饰变量

1 在块中使用static修饰变量

它具有静态存储持续时间、块范围和无链接。

即作用域只能在块中,无法被块外的程序调用;变量在程序加载时创建,在程序终止时结束。

它只在编译时初始化一次。如果没有显式初始化,默认初始化为0.

#include<stdio.h>

voidtrystat(void);

intmain(void)

{

intcount;

for(count =1; count <=3; count++)

  {

         printf("Here comes iteration %d:\n", count);

          trystat();

  }

return0;

}

voidtrystat(void)

{

intfade =1;

staticintstay =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每次都会重新开始。这指出了初始化的不同之处:fade 在trystat() 每次调用都从新初始化,而stay 变量只初始化一次。

(3) 静态变量在程序加载到内存之后就已经就位了。将语句static int stay = 1; 放在trystat()函数中告诉编译器,只允许trystat() 函数查看变量;它不是在运行时执行的语句。

2 在任何函数外部使用static修饰变量

它具有静态存储时间、文件范围和内部链接。

即作用域在当前文件之中(只能被同一文件中的函数使用),无法被其他文件调用

它只在编译时初始化一次。如果没有显式初始化,默认初始化为0。

使用static修饰函数

作用域限制在当前定义的文件中使用,从而避免了多文件函数名称冲突的可能性。通常文件中不作为接口的函数,建议使用static修饰,这样避免不同文件使用相同的函数名发生冲突。

static BOOL wavTaskCreated = FALSE;

static QueueHandle_t wav_msg_queue =NULL;

static WAV_PLAY_QUEUE_t wavPlayQueue;

static bool wav_get_version_flag =false;

static char wav_version[32];

static uint8_t  *Wav_GetFileName(WAV_TYPE_t wav_type)

{

}

static bool Wav_GetFileInfo(WAV_FILE_INFO_t *pFileInfo,uint8_t*pFileName)

}static bool Wav_GetVersion_Internal(WAV_FILE_INFO_t *pFileInfo)

{

}

static bool Wav_ReadFile(uint8_t*pData,uint32_toffset,uint32_tsize)

{

}

static boolWav_SendToDA(uint8_t*pFile,uint32_tsize,uint32_tvolume)

}

static BOOLWav_Put_Queue(WAV_TYPE_t wav_type, BOOL fromISR)

}

static BOOLWav_Get_Queue(WAV_TYPE_t *pWavType)

{

}

static bool Wav_Play_Inernal(WAV_TYPE_t wav_type)

{

}

voidWav_Init(void)

{

    DA_Init(16000);

   if (!wavTaskCreated)

    {

        wavTaskCreated = TRUE;

        xTaskCreate(wav_task,"WAV", STACK_SIZE_TASK_WAV,NULL, PRIORITY_TASK_WAV,NULL);

         wav_msg_queue = xQueueCreate(WAV_MSG_QUEUE_LENGTH,sizeof(WAV_MESSAGE_t));

           wavPlayQueue.pWavTypeTable =malloc(WAV_PALY_QUEUE_MAX *sizeof(WAV_TYPE_t));  

  }

    wavPlayQueue.front =0;

    wavPlayQueue.end =0;

    wavPlayQueue.sizeNow =0;

    wavPlayQueue.totalSize = WAV_PALY_QUEUE_MAX;

}

boolWav_Play(WAV_TYPE_t wav_type,boolforce)

{

if (!wavTaskCreated)

    {

returnfalse;

    }

if(force) 

   {

        vPortEnterCritical();

             watchdog_feed(); 

               Wav_Play_Inernal(wav_type); 

               vPortExitCritical();

                returntrue;

    }

boolrv = Wav_Put_Queue(wav_type,false); 

   vTaskDelay(30);returnrv;       

 }

上述为某平台使用DA播放wav的程序片段,

staticuint8_t *Wav_GetFileName(WAV_TYPE_t wav_type);

staticboolWav_GetFileInfo(WAV_FILE_INFO_t*pFileInfo,uint8_t*pFileName);

staticboolWav_GetVersion_Internal(WAV_FILE_INFO_t*pFileInfo);

staticboolWav_ReadFile(uint8_t*pData,uint32_toffset,uint32_tsize);

staticboolWav_SendToDA(uint8_t*pFile,uint32_tsize,uint32_tvolume);

staticBOOLWav_Put_Queue(WAV_TYPE_t wav_type, BOOL fromISR);

staticBOOLWav_Get_Queue(WAV_TYPE_t *pWavType);

staticboolWav_Play_Inernal(WAV_TYPE_t wav_type);

上述函数为内部函数使用static 修饰。

voidWav_Init(void);

boolWav_Play(WAV_TYPE_t wav_type,boolforce);

上述两个函数为模块接口(初始化DA和播放wav功能)供外部调用,没有使用static修饰。

原文: https://www.linuxidc.com/Linux/2019-07/159635.htm

相关文章

  • 嵌入式面试中的static,const,volatile

    Static 1. 关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字stat...

  • OC中的 static、extern 、const关键字

    C 语言中 static 关键字的作用 在模块(文件)内的 static 全局变量可以被模块内所用函数访问,但不能...

  • C语言中的static关键字

    @TOC C语言中的static关键字 static 关键字,意为静态。 static 变量 特性:全局变量在函数...

  • Static关键字的作用

    在C++、C、Java等高级语言中均有关键字static C语言中 static的含义不是存储方式,而是指对函数的...

  • Static关键字

    C语言中的static关键字和Java的static关键字意义不一样。 1 用static修饰函数 static用...

  • c/c++ 知识点

    1.static关键字 (from百度知道)在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有...

  • C语言中static关键字作用

    static修饰变量 1 在块中使用static修饰变量 它具有静态存储持续时间、块范围和无链接。 即作用域只能在...

  • 关于static关键字

    1. 在C语言中的用法 在C语言中,static关键字意味着:隐藏 static变量存储在静态数据区,在程序一开始...

  • static用法总结

    1 C语言中 在C语言中,static有三个明显作用: 函数体内static变量,不会随函数结束而消亡。再次调用该...

  • 2018-01-23

    Static关键字用法 C语言中面向过程 静态全局变量 静态全局变量的作用:1.静态全局变量的作用域:不能被其他文...

网友评论

    本文标题:C语言中static关键字作用

    本文链接:https://www.haomeiwen.com/subject/saxmrctx.html