2011-11-16 66 views
0

如果我有在头文件中定义为这样的常数:重新定义的恒定用C

#define MY_CONSTANT 1 

我包括图书馆整个项目,其包括用于相同的常数不同的定义:

#define MY_CONSTANT 0 

我编译时自然会碰到冲突。假设我不能改变我的项目代码,并且我只能更改我的库代码,那么我可以如何通过我的lib定义MY_CONSTANT?

编辑: 只是为了澄清,我的目标是通过库更新我的代码中的常量。因为我正在编写一个库来模拟硬件功能,所以我必须遵循软件本身必须保持不变的规则。在使用常量的主文件中有一个排序循环。我需要改变这个常量,但实际上并没有在主文件中改变它。

+1

你的意思'#定义MY_CONSTANT 1'(没有分号)? – Vlad

+4

这几乎肯定不是你的代码。请向我们展示真实的东西。 –

+0

@ Vlad,可能不会带'='。 –

回答

4

您可以取消定义的其他定义

#ifdef MY_CONSTANT 
#undef MY_CONSTANT 
#endif 
#define MYCONSTANT 0 

此外,您应该删除=;

附:如前所述,它不会更改已编译的代码。

+0

我编译lib和主要代码在一起,所以我会尝试 – mugetsu

+0

所以看起来像会发生什么是我包含的静态库首先编译:O。因此,所有这些undef只是不起作用.... – mugetsu

+0

@mugetsu您包含的静态库已经编译,它们只在构建它时才链接。 – MByD

4

你可以#undef MY_CONSTANT并重新定义你想要的值,但这只是要求麻烦。看看你是否可以完全修改设计,以便MY_CONSTANT不会发生冲突。

3

未定义,REDEF,然后REDEF回

#ifdef MY_CONSTANT 
#undef MY_CONSTANT 
#endif 
#define MY_CONSTANT 0 

/* code here */ 

#undef MY_CONSTANT /* not needed if you don't need the library's definition*/ 
#include "library.h" /* file that originally defined it 
         might not work if include guards prevent it 
         in that case #undef LIBRARY_H 
         although that causes more trouble :(*/ 
+0

我有一个静态库,我添加到项目进行编译,所以它看起来像MY_CONSTANT首先在我的lib中定义,然后在我的主文件中,由于我不能在我的主文件中使用undef创建一个矛盾。 – mugetsu