为什么Codan不能找到size_t

时间:2012-04-10 19:40:14

标签: c++ eclipse eclipse-cdt code-analysis coldfire

我刚刚开始使用Eclipse Indigo(来自Galileo),并且每次使用size_t时,我都会在排水沟中遇到小红虫。

enter image description here

代码编译没有问题,但我怀疑我必须显式添加包含目录的路径。我已经有了通常的嫌疑人。我正在使用Gnu工具链对ColdFire处理器进行交叉编译,所以除了标准包括我在m68k-elf下包含的芯片的mfg

\include  
\include\c++\4.2.1
\include\c++\4.2.1\include
\include\c++\4.2.1\m68k-elf

更新

我注意到此工具链中唯一存在的stddef.h位于lib目录

gcc-m68k\lib\gcc\m68k-elf\4.2.1\include

我在父路径中添加了父路径和\include-fixed,但问题仍然存在。

关于测试的注意事项

当测试什么有效,什么不可用时,我注意到了一些事情

  1. 修改代码分析首选项设置时,代码分析不会重新触发,我仍然需要更改编辑器(只需添加空格)
  2. 关闭Symbol is not resolved的代码分析设置不会使错误消失。
  3. 关闭所有Syntax and Semantic Errors,触发分析,返回并重新打开,然后关闭Symbol is not resolved可防止错误再次出现。

5 个答案:

答案 0 :(得分:3)

检查首选项下的索引器设置 - > C / C ++ - >索引器。

有一个字段叫做“Filed to index up-front”。其内容应为:

cstdarg, stdarg.h, stddef.h, sys/resource.h, ctime, sys/types.h, signal.h, cstdio

如果还有其他内容,请尝试用上面的内容替换它,然后重建索引,看看是否能解决问题。

(特别是,如果你在该字段中拥有的是stdarg.h, stddef.h, sys/types.h,那么我对错误出错有很好的猜测。回到Eclipse Ganymede,这个字段的值是stdarg.h, stddef.h, sys/types.h在较新的版本(Galileo和Indigo)中,它已更改为上述内容。但是,由于此字段是“首选项”的一部分,如果您导出Ganymede首选项并将其导入Galileo / Indigo,则此字段将被旧的覆盖Ganymede的价值。我刚才被这个烧了。)

答案 1 :(得分:2)

要确保获得size_t,您应该#include标题<cstddef>;然后,它将是std::size_t,除非您同时添加using namespace stdusing std::size_t

答案 2 :(得分:1)

如果您的工具链只能使用其默认的包含路径和符号来编译代码,那么只需将Eclipse设置为使用它们即可。转到项目属性中的C/C++ Build -> Discovery Options,对于每种语言,将Compiler invocation command从本机编译器(例如g++)更改为交叉编译器(例如,C:\nburn\gcc-m68k\bin\g++?) 。然后在下一个构建中,自动发现将运行并更新所谓的“内置”路径和符号,这些路径和符号在项目的C/C++ General -> Paths and Symbols中显示给编译器报告的任何内容,并且您可以再次重新索引确保旧的“内置插件”的任何警告都消失了。

答案 3 :(得分:1)

在遇到这个问题和搜索后发现两个堆栈溢出问题遇到同样的问题时,我想我会提交我如何修复它,因为它让我烦恼到实际调查。

我正在运行Fedora而且很烦人,它在/ usr / include / linux ....中有一个stddef.h文件,实际上是空的。所以即使我在include路径中有编译器的stddef.h,索引器实际上正在解析这个其他空文件。所以需要做的是:

前缀您的路径和符号列表与编译器特定的包含路径(在我的情况下是/usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/)以避免另一个空的stddef.h被解析。

答案 4 :(得分:0)

我实际上遇到了同样的问题。问题似乎与fquinner帖子中描述的问题相同,位于/usr/include/linux/stddef.h的stddef.h也是空的。奇怪的是,eclipse发现了正确的stddef.h,甚至可以毫无问题地开启。

如果您只需要像我一样修复eclipse的索引(例如,无论如何使用其他构建工具构建),可以通过将__SIZE_TYPE__定义为预期类型来解决此索引问题,例如: long unsigned int下的C/C++ General -> Paths and Symbols

相关问题