c - 静态和内联

标签 c linux optimization gcc inline

我正在用 C 语言编程。我想要一些关于静态和内联函数的描述。我知道,如果我们将一个函数设为静态,那么它就向编译器表明它仅处于一个翻译单元的内部链接之下。 我对静态和内联有以下疑问:

  1. 如果我们将一个函数设为静态,我们可以在其他翻译单元中使用它吗...即在其他 .c 文件中?如果是..如何?
  2. 如果我们将函数设为静态内联,那么有什么区别呢?编译器将如何处理它?
  3. 将函数设为静态是否会产生与宏相同的效果?
  4. 将函数视为内联取决于编译器,具体取决于大小。那么有什么方法可以强制将其视为内联?
  5. 我们如何使用内联函数和静态函数进行优化?

请阐明上述内容。 平台为Linux,gcc编译器,C语言。

最佳答案

  1. static 函数不能在其他翻译单元中使用。这是他们存在的理由。

  2. inline 向编译器提示函数应该被内联而不是被调用。

  3. 将函数设为静态与使用宏不同。宏基本上会否决编译器。无论它认为内联是否明智,宏都会被内联;宏是文本替换。您还可以将 static 函数传递给需要函数指针的对象。不能用宏来做到这一点。

  4. 宏会强制内联任何内容。甚至可以否决指定 inline

  5. 制作您不想导出的函数static。如果一个函数真的很小,而你真的认为它应该被内联,你可以用inline告诉编译器。宏实际上只用于元编程。编译器比你更清楚。

关于c - 静态和内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10378442/

相关文章:

c - 在 POSIX 中,main(void) 可以恢复命令行参数吗?

c - 使用 realloc 后,数组中的下一个指针丢失

database - URI 图像 - 数据库列 v/s 类文件

c - 在 C 语言中,如何将单个变量设为 're-initialize' 并在 while 循环的每次迭代中使用它?

c - c中的malloc函数?

linux - 如何使用 C 或 shell 在 Linux 中检查密码?

linux - 尝试通过终端连接 https

linux - AWS Linux API 补丁

c - -O2 将 printf ("%s\n", str) 优化为 puts(str)

python - 在 Cython 中优化字符串