c - 为什么 Eclipse 索引一个不存在的预处理器宏的错误值?

标签 c eclipse embedded

我在一个项目中使用不支持 C99 的旧 m68k-elf-gcc,并将 Eclipse Indigo Service Release 1 作为我的 IDE。我的一个跨项目头文件具有以下测试 C99 的代码,如果找到 C99,则使用 stdint.h,否则,手动定义一些固定大小的 _t 类型:

#if __STDC_VERSION__ >= 199901L /* C99, with support for stdint.h>. */
#include <stdint.h>
#else
/* Make sure to set these up correctly for your system if you don't have stdint.h. */
typedef unsigned short uint16_t;
typedef short int16_t;
typedef unsigned char uint8_t;
#endif

这可以很好地编译,并使用手动设置内容的下半部分。然而,Eclipse 的索引器坚持认为 __STDC_VERSION__ 存在,并且实际上具有准确的值 199901L(将光标悬停在宏名称上时会显示该值)。这会导致 Eclipse 文本编辑器和“问题”选项卡在使用 _t 类型的任何行上显示错误,即使这些行编译正常。

我知道解决这个特定问题很容易——从我的头文件中删除除手动 typedef 之外的所有内容——但我真的更希望 Eclipse 索引器与我正在使用的编译器版本有某种关系。我设置了以下项目属性以使 Eclipse 知道我正在使用不同的 GCC:

  • "C/C++ Build"->"Discovery Options:"设置编译器调用命令为"m68k-elf-gcc"
  • "C/C++ Build"->"Tool Chain Editor:"将"Current toolchain"设置为"Cross GCC"

这些似乎至少有一些预期的效果,因为索引器引用了正确的系统包含(在细读标题时转到 m68k-elf-gcc 包含目录,而不是“vanilla”GCC 的包含目录),并且“C/C++ General”->“Paths and Symbols”属性屏幕上的“Includes”和“Symbols”选项卡都匹配 m68k-elf-gcc 内容(不,__STDC_VERSION__ 未在中列出符号列表)。

最佳答案

编译器使用的 __STDC_VERSION__ 的实际值对 Eclipse 是不可见的,因为它是一个预定义的宏,而不是在任何头文件中定义。因此,Eclipse 必须从其他地方获取此值。我相信它被定义为 internally within the CDT parser .

关于c - 为什么 Eclipse 索引一个不存在的预处理器宏的错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160104/

相关文章:

从 iso-8859-15 (Latin9) 到 UTF-8 的转换?

c - 如果不是内存地址,C 指针到底是什么?

正在重新分配的 C 程序指针未分配

java - 如何将基于 Maven 的项目包含到我的非 Maven 项目中

java - 使用 SeleneseTestCase 运行 ANT 会导致 java.lang.NoClassDefFoundError

c - WSAConnectByName 超时

eclipse - 如何使用 Maven Tycho 构建 Junit5 测试

c - 在 Linux 上模拟电路和编程微 Controller

embedded - 如何将 ARM 代码用于实际设备 JTAG?可以用Arduino制作即兴JTAG吗?

image-processing - 即时无损图像压缩