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 之前没有布尔类型,即 _Bool
和 stdbool.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 中为 C++ STL 对象启用 gdb 漂亮打印?