函数在C中保持内部状态

时间:2020-05-19 14:01:56

标签: c strtok

C语言中的函数如何保持其内部状态?

例如strtok()-调用strtok(NULL, del)时,该函数将继续处理前一个字符串。

2 个答案:

答案 0 :(得分:3)

它包含用于跟踪事物的内部变量,声明为static。这也是在多线程程序中不安全使用此类函数的原因。

答案 1 :(得分:2)

这是通过将局部变量声明为static来完成的:

unsigned int some_state_function( void )
{
  static unsigned int internal_state = 0;  // keeps track of the number 
  ...                                      // of times the function has been
  return internal_state++;                 // called - useless, but illustrative
}

变量internal_state的存储持续时间为static,这意味着它的存储在程序启动时被分配并初始化,并保持到程序终止;它的寿命超出了功能的寿命。在这种情况下,初始化是多余的(static对象被初始化为0或等效对象),但它只是在说明概念-初始化仅在程序启动时发生一次,而不是在调用函数时发生。

但是,标识符 internal_state对于some_state_function是局部的-在函数外部不可见。

strtok做类似的事情-它有一个本地static指针,用于跟踪您正在处理的字符串。