什么是“静态”功能?

什么是“静态”功能?

问题是关于普通c函数,而不是c ++ static方法,正如评论中所阐明的那样。

好的,我理解static变量是什么,但什么是static函数?

为什么如果我声明一个函数,让我们说void print_matrix,让我们说a.c(WITHOUT a.h)和include "a.c"- 我得到"print_matrix@@....) already defined in a.obj",但是如果我声明它static void print_matrix然后它编译?

更新只是为了清理 - 我知道包括.c很糟糕,正如你们许多人指出的那样。我只是做它在暂时清除空间main.c,直到我有更好的想法如何将所有这些功能集成到适当.h.c文件。只是一个临时的快速解决方案。


jeck猫
浏览 426回答 3
3回答

慕田峪9158850

static函数是仅对同一文件中的其他函数可见的函数(更准确地说是相同的转换单元)。编辑:对于那些认为,问题的作者意味着“类方法”的人:由于问题被标记,C他意味着一个普通的旧C函数。对于(C ++ / Java / ...)类方法,static意味着可以在类本身上调用此方法,不需要该类的实例。

白衣染霜花

C中的静态函数和C ++中的静态成员函数之间存在很大差异。在C中,静态函数在其转换单元之外是不可见的,它是编译成的目标文件。换句话说,使函数静态限制其范围。您可以将静态函数视为其* .c文件的“私有”(尽管这不是严格正确的)。在C ++中,“static”也可以应用于类的成员函数和数据成员。静态数据成员也称为“类变量”,而非静态数据成员是“实例变量”。这是Smalltalk术语。这意味着类的所有对象只共享一个静态数据成员的副本,而每个对象都有自己的非静态数据成员副本。因此,静态数据成员本质上是一个全局变量,它是一个类的成员。非静态成员函数可以访问类的所有数据成员:静态和非静态。静态成员函数只能对静态数据成员进行操作。考虑这一点的一种方法是在C ++中静态数据成员和静态成员函数不属于任何对象,而是属于整个类。

ibeautiful

关于C ++中的函数,关键字static有两种用途。第一种是将函数标记为具有内部链接,因此不能在其他翻译单元中引用它。在C ++中不推荐使用此用法。对于此用法,首选未命名的命名空间。// inside some .cpp file:static void foo();    // old "C" way of having internal linkage// C++ way:namespace{    void this_function_has_internal_linkage()    {       // ...    }}第二种用法是在类的上下文中。如果一个类具有静态成员函数,则意味着该函数是该类的成员(并且具有对其他成员的通常访问权限),但不需要通过特定对象调用它。换句话说,在该函数内部,没有“this”指针。
打开App,查看更多内容
随时随地看视频慕课网APP