Eclipse CDT为什么说:"语法错误",但编译没有问题[英] Why does Eclipse CDT say: 'syntax error', but compilation no problem

本文是小编为大家收集整理的关于Eclipse CDT为什么说:"语法错误",但编译没有问题的处理方法,想解了Eclipse CDT为什么说:"语法错误",但编译没有问题的问题怎么解决?Eclipse CDT为什么说:"语法错误",但编译没有问题问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在现有的C代码中工作,其中有几行,其语句类似于此:

struct collect_conn *tc = (struct collect_conn *) 
     ((char *)c - offsetof(struct collect_conn, runicast_conn));

struct collect_conn沿以下行:

struct collect_conn {
  struct runicast_conn runicast_conn;
  struct announcement announcement;
  const struct collect_callbacks *cb;
  struct ctimer t;
  uint16_t rtmetric;
  uint8_t forwarding;
  uint8_t seqno;
};

我使用的是Eclipse CDT,它将橙色线条线标记为"语法误差".我认为CDT索引器将其标记为这样. 但是,汇编(在终端中手动)没有问题.

这有点不方便,因为该行上的元素不会被索引(因此调用层次结构并不总是正确的,或元素的突出显示等)

)

为什么ecipse不喜欢它?

推荐答案

Eclipse CDT包含其自己的预处理器/解析器,用于分析您的代码和构建索引.但是,当您调用构建时,CDT调用您的系统编译器,例如GCC. CDT解析器接受的语法与您的编译器接受的语法之间的语法之间可能存在一些差异.发生这种情况时,CDT解析器可能会感到困惑.

在我的系统上,offsetof宏将扩展为使用__offsetof__关键字的表达式. CDT未识别此关键字,因此这就是为什么存在语法错误的原因.为了解决这个问题,CDT解析器具有一个宏观来处理__offsetof__,看起来像这样:

#define __offsetof__(x) (x)

这似乎是不正确的,至少在我的系统上,结果是从源中删除<​​c1>关键字,这仍然导致语法错误.

我能够通过转到路径和符号属性页面并为__offsetof__添加一个映射到'foo'的宏来摆脱语法错误.这欺骗了解析器,只是想到它以前从未见过的函数,而不是语法错误.

另外,您可以通过转到窗口>" preferences">"常规>编辑器">"文本编辑器">注释并取消选中所有复选框,并关闭编辑器中的语法错误报告.

>

其他推荐答案

我已经解决了Eclipse CDT中的问题 - > c/c ++ - >语言映射:添加 内容类型:c-Header 语言:C ++

其他推荐答案

有时,尽管代码没有任何错误编译,但Eclipse CDT的实时代码分析仪显示了C/C ++文件中的某些错误(例如,函数XXX无法解决).这是因为Eclipse CDT使用自己的预处理器/解析器来分析代码并构建索引,而不是Mingw的一个(或任何其他GNU编译器).为了在全球修复工作空间中的所有Eclipse项目,请执行以下步骤: (为了仅针对特定项目解决此问题,请按照菜单' Project->首选项中的步骤1、2和4进行操作')

1-in菜单' window->首选项 - > c/c ++ - >语言映射',添加正确的映射,如下所示:(例如,对于内容类型:C ++源/header文件,使用GNU C ++语言等)

2-in菜单' window->首选项 - > c/c ++-> indexer ',通过检查所有复选框(但不是"跳过"),设置完整索引,如下所示: 全局索引器设置

3-in每个项目的特定属性,菜单' project-> properties-> c/c ++常规 - > indexer ',取消选中"启用项目特定设置",如下所示: 项目索引器设置

4-重建索引,菜单' project-> c/c ++索引 - >重建'.

本文地址:https://www.itbaoku.cn/post/359171.html