Eclipse编辑器未显示函数和枚举值的错误

时间:2016-10-27 05:42:29

标签: c eclipse enums include eclipse-cdt

我将Eclipse CDT用于C项目。我只使用编辑器,因为构建环境在Eclipse之外。

代码中的错误标记符合预期,但有一些例外:

  1. 当我进行函数调用时,函数是否存在无关紧要。编辑器永远不会在函数调用上显示错误标记。我希望有一个“未解决的符号”错误或类似错误。 我希望错误拼写的函数名称显示为错误,我希望在我忘记包含的头文件中声明的现有函数显示为错误。但事实并非如此。

  2. 当我输入项目中其他位置(在头文件中)存在的枚举成员的名称时,即使我不包含包含它的头文件,编辑器也会识别它。这当然会导致编译器错误,但我希望编辑器中有错误标记。

  3. 我缺少一些设置吗?或者这就是eclipse编辑器的工作方式?

    我很久以前很难看到这些错误标记,但记忆可能会对我起诡计......

1 个答案:

答案 0 :(得分:0)

解析其定义在项目中但通过包含无法访问的名称是一个已知问题。它由bug 297690跟踪,并且接近于被修复(大部分辛勤工作都在bug 402498完成)。

解决完全不在项目中的函数的名称可能会在两种情况下发生。

在C代码中

C语言不要求在使用之前声明函数。没有前面声明的用法被视为隐式声明。

即,以下C文件是有效代码:

void func() {
  another_func();  // another_func is implicitly declared here
}

链接器将尝试在链接时找到匹配的函数定义,如果不能,则会给出错误。

因此,如果你拼错another_func,错误将不会在编译时被捕获(仅在链接时),同样CDT无法诊断它。

在C ++模板代码中

与C不同,C ++ 要求在使用之前声明函数。但是,有一个涉及模板的微妙之处。

如果在模板内发生函数调用,并且某些参数是相关的:

template <typename T>
void foo(T t) {
  misspelt_function(t);
}

由于C ++的两阶段名称查找规则的工作方式,CDT无法在foo的定义点诊断拼写错误函数:提供misspelt_function的定义是有效的在<{em>之后<{1}}的定义点(但在实例化之前)由参数依赖查找找到(通过在与foo类型相关联的命名空间中对于这个特定的实例化。)

(CDT 可以理论上诊断t特定实例的拼写错误函数,编译器的方式,但它目前没有输入 - 检查实例化的主体。)