c - static inline void 和 void 有什么区别?

标签 c static inline void

我正在使用 C 语言工作并修改以前由其他人编写的代码。我正在为一些事情而苦苦挣扎,并且我正在尝试尽可能多地了解正在发生的事情。因此,正如我的问题所述,创建函数时 static inline voidvoid 有什么区别?我提前为这篇长文章道歉,但我想让你知道我确实做了一些研究,但不明白我发现了什么。

我找到了 an explanation of static这让我感到困惑:

The static specifier signifies that the function cannot be referenced from other files; that is, the name is not exported by the linker.

通过阅读本文,我假设引用函数与调用函数不同?我假设因为这个函数是从另一个 .c 文件调用的。如果是这样,什么是引用函数?

通过同一个网站,他们解释了inline functions我不明白这是什么意思。

The __inline keyword tells the compiler to substitute the code within the function definition for every instance of a function call. However, substitution occurs only at the compiler's discretion. For example, the compiler does not inline a function if its address is taken or if it is too large to inline.

嗯???

非常感谢任何帮助,我再次为这篇太长的帖子道歉。

以下内容位于 file1.c(使用通用名称,因为我认为这不重要)

COMPLEX cNoiseSample;
CGauss( &cNoiseSample, loopbackRadio->pState );

以下位于file2.c

static inline void CGauss( COMPLEX * pcGauss, P_OS_UNIFORM_RAND_STATE pState )
{
    //code
}

最佳答案

static 表示它不能被另一个编译单元(源文件)引用。 “引用”是指被调用或以其他方式引用的名称,例如分配给函数指针。

inline 是对编译器的提示,该函数的代码应该在调用它的地方以内联方式生成,而不是作为要分支到的单独函数生成。这通常是出于性能原因而完成的。处理微软的报价:

the compiler does not inline a function if its address is taken or if it is too large to inline.

内联函数没有地址,因为它不作为单独的实体存在。它的代码与调用它的代码无缝地交织在一起。因此,如果您获取一个函数的地址(例如,分配给一个指针),那么编译器必须将其生成为一个真正的函数,并且不能内联它。

void 表示函数没有返回值。


看过你的代码示例后,我猜想在某处有一个单独的 CGauss() 定义,它是从 file1.c 调用的,而file2.c 正在调用自己的私有(private)版本。或者 file1.c#includeing file2.c。这会很讨厌。

关于c - static inline void 和 void 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10998975/

相关文章:

c# - 如何内联我的内部函数?

java - 不能从静态上下文中引用的非静态变量

java - 从 BroadcastReceiver 获取方法来更新 UI

c++ - 未定义的静态类变量

clang 问题 : inline function inside another function body in C

javascript - 如何将此内联 javascript 转换为导致冲突的 jQuery 函数?

c++ - 关闭cin与C scanf同步的弊端

c - 在哪里可以找到 PDF 格式的 C89/C90 标准?

c - 变量作为 pthread 中的参数

从汇编代码调用库中的 C 函数