gcc 4.4.2 c89
我一直在重新设计其他人的源代码。
在某个函数中,有人声明了一些静态变量,但似乎没有任何使静态变量静止的目的。我只是想知道下面的评论是否准确?
static char tempstr[64];
根据我的理解,在函数内部声明静态变量时,它将保留作用域,因此就像一个全局变量。
此外,如果静态变量在全局范围内声明,则其范围仅限于文件。
非常感谢任何建议,
答案 0 :(得分:4)
如果我理解你的解释,那就准确了。
在函数内部静态意味着“分配数据段内存,因此值在函数调用之间保持不变,以便所有函数实例(思考,递归或线程)共享相同的实际存储。”
如果在以后的函数调用中使用了先前的值,或者通过外部调用或返回指针从函数中泄漏了引用,那么这很重要。
答案 1 :(得分:2)
是的,您的解释是正确的。除了小心你所谓的“行为像全球”。它在某种意义上就像全局一样,它在调用之间保留了值,但它不是全局可见的,但仍然只在声明它的函数中。
答案 2 :(得分:2)
它并不是一个全球性的。它仍然是一个局部变量,只是在连续调用期间保留其值。
答案 3 :(得分:1)
这是对的。需要记住的另一个方面是,如果您的代码是多线程的,则所有线程将共享变量的相同副本,因此技术上可能原始设计者将该变量用作跨线程通信机制。我不提倡这种技术,但如果没有更多的信息我就不能排除它。