C语言中的静态函数和变量

C语言中的静态函数和变量,c,function,variables,static,C,Function,Variables,Static,我知道在面向对象语言中使用静态变量的目的是什么,但是,我不明白在C中使用“static”关键字的含义是什么。 有人能给我解释一下吗?在函数或全局变量上,静态使函数或全局变量成为该文件的局部变量;其他文件无法通过该名称访问该函数或全局变量(但如果您将指针传递给它,则它们可以访问它) 在局部变量上,它使它的行为与全局变量类似,但只能在该函数中访问(除非再次给出指向它的指针)。静态变量离开函数时的值与下次调用函数时该变量的值相同 静态函数只能从函数出现的同一文件中调用。OO与此有什么关系?甚至维基百科

我知道在面向对象语言中使用静态变量的目的是什么,但是,我不明白在C中使用“static”关键字的含义是什么。
有人能给我解释一下吗?

在函数或全局变量上,
静态
使函数或全局变量成为该文件的局部变量;其他文件无法通过该名称访问该函数或全局变量(但如果您将指针传递给它,则它们可以访问它)


在局部变量上,它使它的行为与全局变量类似,但只能在该函数中访问(除非再次给出指向它的指针)。

静态变量离开函数时的值与下次调用函数时该变量的值相同


静态函数只能从函数出现的同一文件中调用。

OO与此有什么关系?甚至维基百科的定义也应该为你回答这个问题,不是吗?它有很多不同的含义。发布一些代码来解释你到底想要哪一个,并说明为什么你的C教科书没有涵盖这一点。我知道,在面向对象语言上,当你使用静态变量时,每个类只创建一次,而不是为类的每个实例创建一次。这就是我提到OO的原因。此外,全局静态函数/变量通常在.c文件中进行保护,但在.h文件中没有用处@“我是对的吗?”@GrijeshChauhan:是的,你是对的<代码>静态通常在头文件中没有多大用处(尽管我可以想出一两个可能有用的例子)。我请求您分享您的想法@GrijeshChauhan:您可能希望创建一个头文件,声明一个表示模块初始化状态的静态布尔值(当然,初始化为false)然后提供宏,这些宏可以轻松定义初始化模块的函数,除非模块已经初始化。头中的另一个
static
用法是具有可由编译器内联并保持C89兼容的函数。