C语言中内联和静态内联到底是什么意思?

问题描述 投票:0回答:1

我只是对 C 编程语言中的 inline 关键字感到困惑。

1.在我的实践中,内联函数具有内部作用域,那么它与 static 关键字有何不同?

2.inline函数有内部作用域,但是我看到一些inline函数加上了static关键字,有什么用?

//temp.c
inline void exit_aio(){
    puts("inline");
}

void test(){
    exit_aio();//error,undefined reference to `exit_aio'
}

如果我在函数exit_aio()的定义中添加static关键字,那么程序就可以正常运行了。

c
1个回答
0
投票

2.inline函数有内部作用域,但是我看到一些inline函数加上了static关键字,有什么用?

它将

inline
函数放置在标头中,而不会有链接器问题的风险。

我只是对内联关键字感到困惑

现代编译器仅将其视为提示,他们可能决定是否内联函数。如果该函数不是

static
并且它是在许多模块包含的头文件中定义的,则链接器会抱怨。

某些编译器具有 force 内联的特殊属性 - 例如 gcc 的

__attribute__((always_inline))

© www.soinside.com 2019 - 2024. All rights reserved.