C-标头中的函数实现应使用extern / inline / static吗?

克里斯蒂安·杜塞特

我在头文件中使用函数实现来进行简单的代码共享。最小示例:

foo.h:

#ifndef FOO_H
#define FOO_H

// potentially want to include extern/static/inline keyword for this function
int max(int x, int y) {
    return x < y ? y : x;
}

#endif

bar.c:

#include <stdio.h>
#include "foo.h"

int main() {
    printf("Max of 1 and 2: %d", max(1, 2));
}

有人建议我为inline.h文件中实现的功能关键字。但是,这给了我一个链接器错误。如果我使用extern inline它,确实可以编译,但是由于我只是想尝试一下,所以我不确定它在某种程度上不是危险/有害的。

extern inline在这里使用合适吗?如果没有,什么样的组合的staticextern以及inline应该怎么使用?

dbush

如果要将函数的实现放在头文件中,则它必须具有static存储类说明符。这将功能名称的可见性限制为仅最终嵌入该功能的翻译单元(即.c文件)。请注意,这样做意味着如果多个源文件包含此标头,则每个源文件将具有其自己的函数副本。

使用inlinestatic并不是必须的,但是可以作为编译器对它执行某些优化的提示。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在C ++类中实现在C标头中用“ extern”子句指定的函数?

来自分类Dev

为什么在C的标头中使用extern关键字?

来自分类Dev

static / inline关键字:在原型和/或实现之前?

来自分类Dev

C ++-std :: list标头中_List_node_base成员函数的实现在哪里

来自分类Dev

没有任何理由在没有方法的标头上使用extern“ C”吗?

来自分类Dev

在C的标头中定义别名类型的extern变量

来自分类Dev

C ++标头中extern变量的未定义引用

来自分类Dev

可以将#includes放在C ++标头中吗?

来自分类Dev

可以将#includes放在C ++标头中吗?

来自分类Dev

定义在C标头中传递结构的函数

来自分类Dev

在C ++中使用static_cast强制转换为数组引用的指针合法吗?

来自分类Dev

Qt / C ++:在此代码段中可以使用“ static_cast”进行转换吗?

来自分类Dev

使用get_inline_instances覆盖添加权限吗?

来自分类Dev

C什么是函数说明符?就像_inline _NORETURN

来自分类Dev

标头中的“ void f(auto){}”是否需要“ inline”?

来自分类Dev

对于非指针类型,使用static_cast而不是C样式转换有什么优势吗?

来自分类Dev

我可以在标头中定义和声明extern对象的任何方式吗?

来自分类Dev

运行Inline :: C时出错

来自分类Dev

When is the "inline" keyword effective in C?

来自分类Dev

Inline function blocks in C#

来自分类Dev

Perl Inline :: C默认标志

来自分类Dev

C ++-在模板类之外但在标头中定义成员函数

来自分类Dev

C ++继承:在标头中调用基类构造函数

来自分类Dev

标头中声明的难以捉摸的C函数

来自分类Dev

NSApplicationLoad在C标头中?

来自分类Dev

C ++ static,extern与全局数据一起使用

来自分类Dev

在我的示例中以c#调用static是否安全吗?

来自分类Dev

我可以使用inline-css制作可扩展内容吗?

来自分类Dev

在C ++算法标头中,为什么要使用“!(val <* first)”?

Related 相关文章

  1. 1

    如何在C ++类中实现在C标头中用“ extern”子句指定的函数?

  2. 2

    为什么在C的标头中使用extern关键字?

  3. 3

    static / inline关键字:在原型和/或实现之前?

  4. 4

    C ++-std :: list标头中_List_node_base成员函数的实现在哪里

  5. 5

    没有任何理由在没有方法的标头上使用extern“ C”吗?

  6. 6

    在C的标头中定义别名类型的extern变量

  7. 7

    C ++标头中extern变量的未定义引用

  8. 8

    可以将#includes放在C ++标头中吗?

  9. 9

    可以将#includes放在C ++标头中吗?

  10. 10

    定义在C标头中传递结构的函数

  11. 11

    在C ++中使用static_cast强制转换为数组引用的指针合法吗?

  12. 12

    Qt / C ++:在此代码段中可以使用“ static_cast”进行转换吗?

  13. 13

    使用get_inline_instances覆盖添加权限吗?

  14. 14

    C什么是函数说明符?就像_inline _NORETURN

  15. 15

    标头中的“ void f(auto){}”是否需要“ inline”?

  16. 16

    对于非指针类型,使用static_cast而不是C样式转换有什么优势吗?

  17. 17

    我可以在标头中定义和声明extern对象的任何方式吗?

  18. 18

    运行Inline :: C时出错

  19. 19

    When is the "inline" keyword effective in C?

  20. 20

    Inline function blocks in C#

  21. 21

    Perl Inline :: C默认标志

  22. 22

    C ++-在模板类之外但在标头中定义成员函数

  23. 23

    C ++继承:在标头中调用基类构造函数

  24. 24

    标头中声明的难以捉摸的C函数

  25. 25

    NSApplicationLoad在C标头中?

  26. 26

    C ++ static,extern与全局数据一起使用

  27. 27

    在我的示例中以c#调用static是否安全吗?

  28. 28

    我可以使用inline-css制作可扩展内容吗?

  29. 29

    在C ++算法标头中,为什么要使用“!(val <* first)”?

热门标签

归档