我注意到这两种方法都很有效,在这里使用内联的正确方法是什么?
static inline int getAreaIndex()或
inline static int getAreaIndex()另外,getAreaIndex包含一个大循环。有时我只叫它一个,有时我通过一个循环调用它,我应该内联它吗?(它有10线高)
发布于 2020-05-10 15:13:01
来自C标准(6.7项声明)
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这意味着您可以按任何顺序指定声明说明符。
例如,下面所示的所有函数声明都声明同一个函数。
#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。否则,编译器将决定参数的数量和类型是从函数调用中推导出来的。
发布于 2020-05-10 15:13:37
在这里使用内联的正确方法是什么?
static inline和inline static都是允许的,它们的含义是相同的。static inline是首选的,因为像static这样的“存储类说明符”在声明中总是被认为是第一位的(参见C11§6.11.5)。
我应该内联这个函数吗?
要回答这个问题,你需要用两种方式对你的程序进行基准测试,并找出哪个更快。
发布于 2020-05-10 15:36:47
目前它们在功能上是等价的,但是static inline是编写C的正确方法。这是因为C17使其他样式过时了,而且实践很糟糕:
6.11.5存储类说明符 在声明中放置存储类specifier,而不是在声明开始时放置fier,这是一个过时的特性。
static是“存储类说明符”。
https://stackoverflow.com/questions/61714110
复制相似问题