gcc 或 clang 可以内联不在同一编译单元中的函数吗?

Can gcc or clang inline functions that are not in the same compilation unit?

假设我在编译单元中有一个带有 inline 关键字的函数。

如果我有

// math.h
inline int sum(int x, int y);

// math.c
inline int sum(int x, int y)
{
   return x + y;
}

// main.c
#include "math.h"

int main(int argc, char **argv)
{
    return sum(argc,argc);
}

并与

一起建设
gcc -O3 -c math.c -o math.o
gcc -O3 -c main.c -o main.o
gcc math.o main.o

优化编译器会内联 sum 吗? gcc 或 clang 可以从其他编译单元内联函数吗?

当您在启用 LTO 的情况下进行编译时,GCC 可以(并且经常会)内联来自不同 TU 的函数。为此,您需要将 -flto 添加到 CFLAGS/CXXFLAGSLDFLAGS.