我在一个项目中使用不支持 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/