WeHack BBS
gcc在无优化时inline的奇怪行为 - 可打印的版本

+- WeHack BBS (https://bbs.wehack.space)
+-- 版块: 计算机技术 (https://bbs.wehack.space/forum-5.html)
+--- 版块: 程序设计讨论区 (https://bbs.wehack.space/forum-14.html)
+--- 主题: gcc在无优化时inline的奇怪行为 (/thread-191.html)



gcc在无优化时inline的奇怪行为 - vimacs - 10-23-2020

test_inline.c:

代码:
inline int addi(int a, int b)
{
  return a + b;
}

int add3(int a, int b, int c)
{
  int t = addi(a, b);
  return addi(t, c);
}

main.c:

代码:
extern int add3(int a, int b, int c);

int main()
{
  return add3(1,2,3);
}


GCC 10.2 不用-O选项编译之后,发现 test_inline.c 里面的 addi 变成了未解析符号,于是最后链接失败。用了 -O2 就正常了。
如果把 inline 改成 static inline,那就都正常了。

clang 10.0.1 也是这个现象。

因为这个现象,我把softfloat库放进gem5之后,我就构建出错了,这时候才发现gem5的ext/下的库在编译时都没开优化。


RE: gcc在无优化时inline的奇怪行为 - nadebula - 12-03-2020

main()函数的返回值是有意义的,return add3(1,2,3);这样做真的好么……不由得想起了老谭经典的void main(void);函数原型。