静态内联 vs 内联静态

7 c static inline c99 function-declaration

我注意到两者都有效,在这里使用内联的正确方法是什么?

static inline int getAreaIndex()
Run Code Online (Sandbox Code Playgroud)

或者

inline static int getAreaIndex()
Run Code Online (Sandbox Code Playgroud)

另外,getAreaIndex 包含一个大循环。有时我只调用一个,有时我通过循环调用它,我应该内联它吗?(它有 10 行高)

zwo*_*wol 6

在这里使用内联的正确方法是什么

双方static inlineinline static允许他们意味着同样的事情。static inline是首选风格。

我应该内联这个函数吗

要回答这个问题,您需要以两种方式对您的程序进行基准测试,并找出哪个更快。


Vla*_*cow 4

来自 C 标准(6.7 声明)

\n\n
declaration:\n    declaration-specifiers init-declarator-listopt ;\n    static_assert-declaration\n\ndeclaration-specifiers:\n    storage-class-specifier declaration-specifiersopt\n    type-specifier declaration-specifiersopt\n    type-qualifier declaration-specifiersopt\n    function-specifier declaration-specifiersopt\n    alignment-specifier declaration-specifiersopt\n
Run Code Online (Sandbox Code Playgroud)\n\n

这意味着您可以按任何顺序指定声明说明符。

\n\n

例如,下面显示的所有函数声明都声明相同的函数。

\n\n
#include <stdio.h>\n\nstatic inline int getAreaIndex( void );\ninline static int getAreaIndex( void );\nint static inline getAreaIndex( void );\nstatic int inline getAreaIndex( void );\ninline int static getAreaIndex( void )\n{\n    return  0;\n}\n\n\nint main(void) \n{\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

至于内联函数说明符则根据 C 标准(6.7.4 函数说明符)

\n\n
\n

6 使用内联函数说明符声明的函数是内联函数。将 \xe2\x88\x97 函数设为内联函数建议对该函数的调用尽可能快。138)此类建议的有效程度是由实现定义的。

\n
\n\n

还有一个脚注

\n\n
\n

139) 例如,实现可能永远不会执行内联替换,或者可能仅对内联声明范围内的调用执行内联替换

\n
\n\n

请注意,您应该指定为函数参数void。否则,编译器将决定参数的数量和类型是从函数调用中推导出来的。

\n