在C语言中,什么是"静态"函数?
在C语言中,什么是"静态"函数?
该问题是关于普通的C函数,而不是C++的静态方法,这在评论中得到澄清。我知道什么是静态变量,但是什么是静态函数?为什么,如果我在一个C文件中(没有a.h),比如说a.c中声明一个函数,比如说void print_matrix,并包含“a.c”——我会得到“print_matrix @@ …”在a.obj中已经定义了,但是如果我声明它为static void print_matrix,则它可以编译?更新一下——只是为了澄清一些事情——我知道包含“.c”是不好的,正如你们中的许多人所指出的那样。我只是为了临时清空main.c中的空间,直到我有更好的主意将所有这些函数分组到适当的.h和.c文件中。只是一个临时的,快速的解决办法。
admin 更改状态以发布 2023年5月22日
在 C 语言中,静态函数和 C++ 中的静态成员函数存在很大的区别。在 C 中,静态函数在其所编译成的目标文件之外是不可见的,也就是说,将函数声明为静态可以限制其作用域。你可以将静态函数视为“私有”的,它仅在 *.c 文件中可见(虽然这并不完全正确)。\n\n在 C++ 中,“static”也可以应用于类的成员函数和数据成员。静态数据成员也称为“类变量”,而非静态数据成员则被称为“实例变量”。这是 Smalltalk 中的术语。这意味着,所有对象共享一个静态数据成员的副本,而每个对象都有其自己的非静态数据成员副本。因此,静态数据成员本质上是一个属于类的全局变量。\n\n非静态成员函数可以访问类的所有数据成员,包括静态和非静态成员。静态成员函数只能操作静态数据成员。\n\n一个思考方式是,在 C++ 中,静态数据成员和静态成员函数不属于任何对象,而是属于整个类。