pax*_*blo 14
是.当您应用于static函数时,它与递归函数中的静态变量不同(这是一个问题).
前者只是控制函数是否在编译单元外可见(例如,对于链接器).
后者意味着所有递归级别的变量只有一个副本,而不是每个递归级别一个副本,这通常是需要的.
所以:
static unsigned int fact (unsigned int n) {
if (n == 1U) return 1;
return n * fact (n-1);
}
Run Code Online (Sandbox Code Playgroud)
没关系,但是:
static unsigned int fact (unsigned int n) {
static unsigned int local_n; // would be fine if not static!
local_n = n;
if (local_n == 1U) return 1;
return local_n * fact (local_n-1);
}
Run Code Online (Sandbox Code Playgroud)
是不是,因为静态变量将被破坏.