static inline void
和void
之间有什么区别?提前为冗长的文章道歉,但我希望您知道我做了一些研究,但不理解我找到的内容。我在这里找到一个关于
static
的解释,但它让我感到困惑:“static”说明符表示无法从其他文件引用该函数;也就是说,链接器不会导出该名称。
通过阅读此内容,我认为引用函数与调用函数不同?我之所以这么认为,是因为从另一个.c文件中调用了此函数。如果是这种情况,那么引用函数是什么意思?
通过同一网站,他们解释了内联函数,我不明白它是什么意思。
“__inline”关键字告诉编译器替换函数定义中的代码以代替每个函数调用实例。然而,替换仅在编译器自己的判断下发生。例如,如果函数的地址被取出或者需要替换太大,编译器就不会对其进行内联处理。
什么??
非常感谢任何帮助,并再次为这篇可怕的长文章道歉。
下面的内容位于file1.c中(使用通用名称,因为我认为这并不重要)。
COMPLEX cNoiseSample;
CGauss( &cNoiseSample, loopbackRadio->pState );
以下内容位于file2.c文件中
static inline void CGauss( COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState )
{
//code
}
inline
来强制执行一次定义规则(我不确定C语言的细节是否相同)。 - rubenvbstatic
:作为一个通用的经验法则,如果你大量使用static
,你的代码将会更容易维护。它告诉维护者“你可以自由地更改这个函数而不会破坏文件外的任何东西”。任何不是静态的符号(函数或变量)都可以从任何地方引用。如果你碰巧来自面向对象的语言(C++、Java等),那么请将static
函数(或全局变量)视为private
,其他所有内容视为public
。此外,使用static
函数可以进行更积极的编译器优化。 - Brian McFarlandstatic
函数不能直接从其他翻译单元调用,但您可以传递一个指向static
函数的函数指针到另一个翻译单元,并从那里调用这些函数。 - 12431234123412341234123