c - 当函数体没有返回语句时内联

标签 c return inline

我读到当函数体中不存在“return”语句时以及返回类型不是 void 的情况下,编译器可能不会执行内联。如果内联不能发生在返回 void 以外的任何东西的函数中,为什么它需要一个“return”语句来使函数内联。假设简单代码如下:

此处声明为内联的函数在其主体中没有“return”语句。内联发生在这里吗?有什么方法可以知道编译器是否接受并执行了内联请求?

#include<stdio.h>
inline void call()
{
    printf("*****In call*****\n");
}

main()
{
    call();
}

最佳答案

这显然是一个特定于编译器的问题,但由于您使用的是 gcc,因此 gcc 会生成以下内容:

.cfi_startproc
subq    $8, %rsp
.cfi_def_cfa_offset 16
movl    $.LC0, %edi
call    puts
xorl    %eax, %eax
addq    $8, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc

其中 .LC0 是您的硬编码字符串 ( complete assembly dump )。如您所见,此处没有对 call 的调用,所以是的,gcc 确实使用 -O2 内联此调用。

关于c - 当函数体没有返回语句时内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30302123/

相关文章:

C:从一个文件中读取,排序,然后输出到另一个

c - 如何优雅地snprintf?

c - 结构元素命令将设置什么值?

python - 在 Python Sphinx 中返回列表或元组

c++ - 指定extern “C”时,为什么Visual Studio无法给出 undefined reference 错误?

复制具有不同大小的缓冲区的文件以进行读取和写入

java - 理解 try catch finally 及其返回值

c - 返回字符串而不是 int

html - 在换行符周围放置多个内联元素的轮廓?

css - 垂直对齐列表项内的文本