我正在用 C 语言编程。我想要一些关于静态和内联函数的描述。我知道,如果我们将一个函数设为静态,那么它就向编译器表明它仅处于一个翻译单元的内部链接之下。 我对静态和内联有以下疑问:
- 如果我们将一个函数设为静态,我们可以在其他翻译单元中使用它吗...即在其他 .c 文件中?如果是..如何?
- 如果我们将函数设为静态内联,那么有什么区别呢?编译器将如何处理它?
- 将函数设为静态是否会产生与宏相同的效果?
- 将函数视为内联取决于编译器,具体取决于大小。那么有什么方法可以强制将其视为内联?
- 我们如何使用内联函数和静态函数进行优化?
请阐明上述内容。 平台为Linux,gcc编译器,C语言。
最佳答案
static
函数不能在其他翻译单元中使用。这是他们存在的理由。inline
向编译器提示函数应该被内联而不是被调用。将函数设为静态与使用宏不同。宏基本上会否决编译器。无论它认为内联是否明智,宏都会被内联;宏是文本替换。您还可以将
static
函数传递给需要函数指针的对象。不能用宏来做到这一点。宏会强制内联任何内容。甚至可以否决指定
inline
。制作您不想导出的函数
static
。如果一个函数真的很小,而你真的认为它应该被内联,你可以用inline
告诉编译器。宏实际上只用于元编程。编译器比你更清楚。
关于c - 静态和内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10378442/