钓鱼恶魔 2023-11-01 11:00 采纳率: 0%
浏览 17
已结题

sourceinsight4解析结构体初始化赋值问题

在结构体变量声明时,使用linux内核风格赋值,在sourceinsight4中无法正确解析
.h文件里

typedef struct
{
    int para_b;
}STRUCT_SUB_B;
typedef struct
{
    int para_a;
    STRUCT_SUB_B str_b;
}STRUCT_A;

.c文件里

STRUCT_A global_struct_a = {
    .para_a = 1,
    .str_b = {
        .para_b = 5,
    },
}

以上代码中".para_b =5,"无法被正确解析,在sourceinsight里会显示成黑色。
有没有解决方法?

  • 写回答

10条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-01 11:00
    关注

    基于Monster 组和GPT的调写:

    Source Insight 是一个流行的代码浏览和编辑工具,但根据你的描述,它似乎不能很好地识别 Linux 内核风格的初始化(也称为 designated initializers)。这种风格的初始化在 Linux 内核代码中经常被使用,并且是 C99 标准的一部分。

    解决这个问题,你可以尝试以下几种方法:

    1. 升级 Source Insight:确保你使用的是最新版本的 Source Insight。软件开发者可能已经在更新的版本中修复了这个问题。

    2. 检查设置:Source Insight 可能有某些设置或配置选项,允许你调整其语法高亮或解析特定的代码风格。你可以深入浏览其设置,看看是否有相关选项。

    3. 使用注释:如果 Source Insight 不能正确解析,你可以使用注释来帮助它。例如,在初始化前后添加一些注释,这可能会“提示”Source Insight 以不同的方式解析代码。

      STRUCT_A global_struct_a = {
          // Start of initialization
          .para_a = 1,
          .str_b = {
              .para_b = 5,
          },
          // End of initialization
      }
      
    4. 使用传统的初始化风格:如果其他方法都不起作用,你可以考虑使用传统的结构体初始化风格,而不是 designated initializers。

      STRUCT_A global_struct_a = {
          1,  // para_a
          {5} // str_b.para_b
      };
      
    5. 考虑使用其他编辑器:如果 Source Insight 经常给你带来此类问题,也许考虑切换到支持 Linux 内核风格初始化的其他编辑器或 IDE 会更好。例如,VS Code、Eclipse CDT 或 CLion 等都支持这种初始化风格。

    最后,你也可以考虑向 Source Insight 的开发者报告这个问题,他们可能会在未来的版本中修复它。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月2日
  • 赞助了问题酬金15元 11月1日
  • 创建了问题 11月1日

悬赏问题

  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗