基于Eclipse和C的问题:#定义aren';t在头文件之外工作
使用EclipseIDE。问题是基于Eclipse和C的问题:#定义aren';t在头文件之外工作,c,eclipse,ide,c-preprocessor,C,Eclipse,Ide,C Preprocessor,使用EclipseIDE。问题是#defines没有从头文件传递到c和h文件。不确定这是不是一个项目设置之类的东西,但是VisualStudioIDE在同一个项目上并没有给我带来任何麻烦。但是Eclipse中的一些项目没有这个问题。有什么想法可能是错误的吗?请参见下面的问题示例 即使示例是在header1.h中定义的,它也不会被识别为在main.c中定义的。编译器查找头也没有问题。谢谢大家的帮助 校长1.h #define EXAMPLE 1 main.c #include "Header1.
#defines
没有从头文件传递到c和h文件。不确定这是不是一个项目设置之类的东西,但是VisualStudioIDE在同一个项目上并没有给我带来任何麻烦。但是Eclipse中的一些项目没有这个问题。有什么想法可能是错误的吗?请参见下面的问题示例
即使示例是在header1.h
中定义的,它也不会被识别为在main.c
中定义的。编译器查找头也没有问题。谢谢大家的帮助
校长1.h
#define EXAMPLE 1
main.c
#include "Header1.h"
#if defined(EXAMPLE)
/* code here */
#endif
您提到编译器和VisualStudio没有问题,所以假设您所指的代码在EclipseIDE中是灰色的?如果是,请检查索引器设置 首选项-->C/C++-->索引器 选中启用索引器检查索引中未包含的源文件 生成检查自动更新索引检查使用活动生成 配置 等等 希望这与您的问题相关。这有效吗
#ifdef EXAMPLE
而不是
#if defined(EXAMPLE)
当使用
#定义s(字符串而非整数)时,可以看到与问题中类似的行为
下面的代码似乎应该运行code()代码>仅当模式
等于字符串不同时
:
模式.h
#define MODE something
#define MODE_something 0
#define MODE_different 1
#define MODE MODE_something
// Select the active mode:
#define MODE_something
//#define MODE_different
不同的.cpp
#include "mode.h"
#if MODE == different
Code();
#endif
#include "mode.h"
#if MODE == MODE_different
Code();
#endif
#include "mode.h"
#ifdef MODE_different
Code();
#endif
Eclipse显示code()代码>显示为活动时应为非活动状态。原因是预处理器不支持字符串比较,只支持整数比较1
在different.cpp
中的模式
上滑动鼠标时,模式
显示为具有值某物
。虽然这在技术上是正确的,但它可能会产生误导,因为模式
和某物
的计算结果是相同的(定义但为空的值)。假设它们都有相同的值(没有),它们的计算结果是相等的,code()代码>正在运行
1这将在中详细介绍
解决方案
我想到了两种可能的正确处理方法:
- 为每个选项指定数值
- 使用唯一的
#为每个选项定义s
使用数值
代码可以编写如下:
模式.h
#define MODE something
#define MODE_something 0
#define MODE_different 1
#define MODE MODE_something
// Select the active mode:
#define MODE_something
//#define MODE_different
不同的.cpp
#include "mode.h"
#if MODE == different
Code();
#endif
#include "mode.h"
#if MODE == MODE_different
Code();
#endif
#include "mode.h"
#ifdef MODE_different
Code();
#endif
在这种情况下,代码按预期工作,因为模式
和模式_不同
计算为两个不同的值(0
和1
)
使用唯一的#定义s
另一种方法是为每个选项使用唯一命名的宏。例如:
模式.h
#define MODE something
#define MODE_something 0
#define MODE_different 1
#define MODE MODE_something
// Select the active mode:
#define MODE_something
//#define MODE_different
不同的.cpp
#include "mode.h"
#if MODE == different
Code();
#endif
#include "mode.h"
#if MODE == MODE_different
Code();
#endif
#include "mode.h"
#ifdef MODE_different
Code();
#endif
这似乎是一个相当基本的功能,可能会出错;你能把你的问题简化成其他人可以轻易测试的东西吗?