You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC环境下如何强制调用函数的external definition而非inline定义?

可用的解决方案

  • 使用-fno-inline编译选项:
    该选项会全局禁用gcc对inline函数的优先调用逻辑,忽略所有翻译单元内的inline声明,直接链接外部定义的函数版本。编译命令如下:
    gcc -fno-inline main.c foo.c -o test
    
    编译后运行程序,输出将为Test external definition。
  • 针对单个函数禁用内联:
    不需要全局修改编译规则时,可给main.c内的inline函数添加__attribute__((noinline))属性,修改后的代码如下:
    #include <stdio.h>
    
    inline __attribute__((noinline)) void foo(void){
        printf("Test\n");
    }
    
    int main(void){
        foo();
    }
    
    该属性会告知gcc不要优先使用当前翻译单元的inline定义,自动链接其他翻译单元的external definition。
  • 额外说明:
    gcc不同编译标准下inline的行为存在差异,默认gnu89标准中inline规则与C99及之后的标准不同,指定-std=gnu89编译也会触发优先调用外部定义的逻辑,但该方法可控性较低,更推荐使用前两种方案。

内容的提问来源于stack exchange,提问作者Some Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:27:01