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
/CXXFLAGS
和 LDFLAGS
.
假设我在编译单元中有一个带有 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
/CXXFLAGS
和 LDFLAGS
.