函数在 C 中维护内部状态

Function maintains internal state in C

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

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

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

这是通过将局部变量声明为 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_statestatic存储时间,这意味着它的存储空间在程序启动时分配并初始化,并一直保留到程序终止;它的生命周期超出了函数的生命周期。在这种情况下,初始化是多余的(static 对象被初始化为 0 或等价物),但它是为了说明概念 - 初始化发生一次,在程序启动时,而不是在调用函数时.

然而,标识符 internal_statesome_state_function 的局部变量——它在函数外是不可见的。

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