首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态内联与内联静态

静态内联与内联静态
EN

Stack Overflow用户
提问于 2020-05-10 15:03:49
回答 5查看 2.2K关注 0票数 10

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

代码语言:javascript
复制
static inline int getAreaIndex()

代码语言:javascript
复制
inline static int getAreaIndex()

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-05-10 15:13:01

来自C标准(6.7项声明)

代码语言:javascript
复制
declaration:
    declaration-specifiers init-declarator-listopt ;
    static_assert-declaration

declaration-specifiers:
    storage-class-specifier declaration-specifiersopt
    type-specifier declaration-specifiersopt
    type-qualifier declaration-specifiersopt
    function-specifier declaration-specifiersopt
    alignment-specifier declaration-specifiersopt

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

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

代码语言:javascript
复制
#include <stdio.h>

static inline int getAreaIndex( void );
inline static int getAreaIndex( void );
int static inline getAreaIndex( void );
static int inline getAreaIndex( void );
inline int static getAreaIndex( void )
{
    return  0;
}


int main(void) 
{
    return 0;
}

至于内联函数说明符,则按照C标准(6.7.4函数说明符)

6用内联函数说明符声明的函数是内联函数。使一个函数成为内联函数意味着对该函数的调用要尽可能快。138),这些建议有效的程度是实现定义的.

还有一个脚注

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

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

票数 4
EN

Stack Overflow用户

发布于 2020-05-10 15:13:37

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

static inlineinline static都是允许的,它们的含义是相同的。static inline是首选的,因为像static这样的“存储类说明符”在声明中总是被认为是第一位的(参见C11§6.11.5)。

我应该内联这个函数吗?

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

票数 5
EN

Stack Overflow用户

发布于 2020-05-10 15:36:47

目前它们在功能上是等价的,但是static inline是编写C的正确方法。这是因为C17使其他样式过时了,而且实践很糟糕:

6.11.5存储类说明符 在声明中放置存储类specifier,而不是在声明开始时放置fier,这是一个过时的特性。

static是“存储类说明符”。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61714110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档