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

5
我正在使用最新版本的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文件都表现出这种行为。


5
“bool”是C++中的基本数据类型。在C语言中,直到C11才有布尔类型“_Bool”,并且“stdbool.h”中有一个名为“bool”的typedef。因此,我猜测它可以在C++文件中工作,因为它已经被编入了语言中。你的C项目需要配置为C11标准吗? - Christian Gibbons
我想我应该补充一下,这也发生在我的自定义类型中。我包含了“map.h”。有趣的是,索引器会识别“map_create()”函数,但不会识别我的类型“Map”,例如Map map = map_create();。 - geminicode
有趣的是索引器会识别map_create()函数,但不会识别我的类型“Map”,例如Map map = map_create(); -- C与C++不同之处在于你必须写成struct Map map = map_create();,对吧? - HighCommander4
2个回答

0

我同意这是Eclipse CDT中的一个错误,我已经在它的错误跟踪器中提交了


0

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

但是有一个解决方法。如果您有一个包含.c和.cpp文件的项目,请在项目属性 -> C/C++ General -> Language Mappings中,将“C Source File”映射到“GNU C ++”语言。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接