Kate Zz
Kate Zz

Reputation: 3751

Setting macro-variable-value in macro-function C++

I need to call a function which call a macro-function to change macro-value in runtime.

This code isn't compiled:

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)

In function SET_MY_MACRO_VAL

> error: lvalue required as left operand of assignment

    #define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)
                                          ^
    in expansion of macro 'SET_MY_MACRO_VAL'
         SET_MY_MACRO_VAL(True);
         ^

Upvotes: 3

Views: 7245

Answers (1)

Clonk
Clonk

Reputation: 2070

Macro value are replaced BEFORE compile time by the preprocessor and do not exist at run time.

It is not a variable it is simply a way of using text for the value "32".

If you do this :

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)

It will be expanded to this

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(32=(IS_TRUE)?16:U32)

What you can do is use a #define

#ifdef SET_MACRO_VAL_32
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif

Or use a conditionnal macro if you prefer

#if (IS_TRUE>0)
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif

Edit : In C++, you shouldn't really need macro though. You can use template and / or constexpr variable for compile-time value. In C++17 you can even use constexpr if.

Upvotes: 3

Related Questions