C 文件与 C++ 文件的 Eclipse CDT 索引器结果不同

Posted

技术标签:

【中文标题】C 文件与 C++ 文件的 Eclipse CDT 索引器结果不同【英文标题】:Eclipse CDT indexer different results for C file than C++ file 【发布时间】:2019-07-17 00:09:44 【问题描述】:

我正在使用带有最新 CDT 的 Eclipse 2018-12。编辑器出现奇怪的索引问题。鉴于以下。如果源文件具有“.c”扩展名,则索引器会抱怨无法解析类型“bool”和“false”。如果文件具有“*.cpp”扩展名,则类型被解析。

在这两种情况下,项目都会构建并可以调试。

不确定是否重要,但我正在使用 CMake 3.13 生成 Eclipse 项目文件,尽管我尝试手动调整项目设置无济于事。

#include <stdbool.h>
void main(void)

    bool success = false;

我有一个 C 项目,但我的单元测试使用 GTest,并且是项目中唯一的 .cpp 文件。所有 .c 文件都表现出这种行为。

【问题讨论】:

bool 是 C++ 中的基本类型。 C 在 C11 之前没有布尔类型,即 _Boolstdbool.h 的类型定义为 bool。所以我最好的猜测是它适用于 C++ 文件,因为它已经融入了语言。您的 C 项目是否需要针对 C11 标准进行配置? 我想我应该补充一点,这也发生在我自己的类型上。我包括“map.h”。有趣的是,索引器会识别 map_create() 函数,但无法识别我的类型“Map”,如 Map map = map_create(); "有趣的是,索引器会识别 map_create() 函数,但无法识别我的类型“Map”,如 Map map = map_create();" -- C 与 C++ 的不同之处在于你必须写 struct Map map = map_create();,不是吗? 【参考方案1】:

我同意这是 Eclipse CDT 中的一个错误,我已经 filed in its bug tracker。

【讨论】:

【参考方案2】:

在 Eclipse 论坛中找到了类似的帖子。共识是这可能是索引器/编辑器代码中的错误。

但是有一个变通的解决方案。如果您在项目属性 -> C/C++ 常规 -> 语言映射中有一个包含 .c 和 .cpp 文件的项目,请将“C 源文件”的映射添加到“GNU C++”语言。

由于我的构建文件是由 CMake 生成的,我认为这不会影响 Eclipse 构建/调试我的代码的方式。

【讨论】:

以上是关于C 文件与 C++ 文件的 Eclipse CDT 索引器结果不同的主要内容,如果未能解决你的问题,请参考以下文章

使用 Eclipse + CDT + MinGW32 开发 C++ Socket 程序找不到库文件和头文件

Eclipse CDT:如何在 C 源代码上使用 GCC C++ 编译器?

Eclipse CDT 崩溃 java

如何在 Eclipse CDT 中为 C++ STL 对象启用 gdb 漂亮打印?

Eclipse CDT vs NetBeans C++ vs [重复]

在 c++ Eclipse CDT 中使用不同的值构建