这个问题是关于普通的c函数,而不是c++的静态方法,在评论中已经澄清了。
我知道什么是静态变量,但是什么是静态函数呢?
为什么如果我声明一个函数,让我们说void print_matrix,在让我们说a.c(没有a.h),并包括“a.c”-我得到“print_matrix@@....)已经定义在a.b obj”,但如果我声明它为静态void print_matrix,然后它编译?
只是澄清一下——我知道包含。c是不好的,就像你们很多人指出的那样。我这样做只是为了暂时清除main.c中的空间,直到我更好地了解如何将所有这些函数分组到适当的.h和.c文件中。只是一个临时的,快速的解决方案。
C中的静态函数和c++中的静态成员函数之间有很大的区别。在C语言中,静态函数在其翻译单元(即它被编译到的目标文件)之外是不可见的。换句话说,使函数静态限制了它的作用域。您可以将静态函数视为其*.c文件的“私有”(尽管严格来说这并不正确)。
在c++中,“static”也可以应用于类的成员函数和数据成员。静态数据成员也称为“类变量”,而非静态数据成员则称为“实例变量”。这是Smalltalk术语。这意味着类的所有对象共享的静态数据成员只有一个副本,而每个对象都有自己的非静态数据成员副本。静态数据成员本质上是一个全局变量,它是类的成员。
非静态成员函数可以访问类的所有数据成员:静态和非静态。静态成员函数只能对静态数据成员进行操作。
考虑这个问题的一种方法是,在c++中,静态数据成员和静态成员函数不属于任何对象,而是属于整个类。