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

是否存在编译指示或属性可避免GCC移除未使用的调试类型?

GCC未使用类型调试符号保留方法

默认情况下,GCC不会为未使用的类型生成调试符号。例如以下代码:

union my_type_A { int _; };

int main() {}

由于实际项目复杂度较高,启用全局选项-fno-eliminate-unused-debug-types会带来显著的空间开销。目前常用的临时解决方案是添加一个未使用的函数来引用该类型:

void foo(my_type_A) {}

但这种方法不够直观,以下是更合适的方案:

解决方案:使用**__attribute__((used))**属性

可以通过GCC的used属性针对单个类型保留调试符号,无需启用全局选项。有两种实现方式:

  1. 标记typedef
    为类型的typedef添加__attribute__((used))属性,即使该typedef未被使用,也会保留对应类型的调试符号:

    union my_type_A { int _; };
    typedef union my_type_A my_type_A __attribute__((used));
    
    int main() {}
    
  2. 直接标记类型定义
    在类型定义时添加__attribute__((used))属性(GCC 4.9及以上版本支持):

    union __attribute__((used)) my_type_A { int _; };
    
    int main() {}
    

以上两种方式都能确保目标类型的调试符号被GCC保留,同时避免全局选项带来的额外空间开销。

参考GCC官方手册的「调试选项」章节内容,-fno-eliminate-unused-debug-types是全局禁用未使用调试类型移除的方案,而__attribute__((used))则是针对单个类型的轻量化替代方案。

内容的提问来源于stack exchange,提问作者Home of the Brave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:06:26