mugetsu
mugetsu

Reputation: 4398

redefining a constant in C

If I have a constant defined as such in a header file:

#define MY_CONSTANT 1

And I include a library to the whole project which includes a different definition for the same constant:

#define MY_CONSTANT 0

I naturally get conflicts while compiling. Supposing that I cannot alter my project code and that I can only change my library code, what can I do to make MY_CONSTANT as defined by my lib?

EDIT: just to clarify, my goal is to update a constant in my code through a library. Because I'm writing a library to simulate hardware functions, I have to go by the rule that the software itself must be untouched. There is a loop of sort in the main file that uses the constant. I need to change this constant, but without actually altering it in the main file.

Upvotes: 2

Views: 3953

Answers (3)

Pubby
Pubby

Reputation: 53037

Undef, redef, and then redef it back

#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 :( */

Upvotes: 4

MByD
MByD

Reputation: 137312

You can undefine the other definition

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

Also, you should remove the =, and the ;

P.S. as mentioned, it will not change the code that already compiled.

Upvotes: 6

K-ballo
K-ballo

Reputation: 81349

You can #undef MY_CONSTANT and redefine to the value you want, but that's just asking for trouble. See if you can modify the design entirely so that MY_CONSTANTs don't clash.

Upvotes: 4

Related Questions