Sujet : Re: Concatenated if and preprocessor
De : pozzugno (at) *nospam* gmail.com (pozz)
Groupes : comp.lang.cDate : 14. Mar 2025, 13:02:59
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vr15ti$rtjs$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
Il 13/03/2025 16:44, pozz ha scritto:
Consider this code:
if (cond1) {
...
} else if (cond2) {
...
} else if (cond3) {
...
}
I want to activate every single if with a macro preprocessor. All the combinations are possible: only the first, only the second, only the third, the first and second... and so on.
What's the best method to have a clean code that is always compiled without errors?
You're right, a real example is better to define my problem.
I have a project that can be compiled in different ways, depending on the final product model (it's an embedded platform, it's a material device).
I have three models with different characteristics: MODEL_A, MODEL_B, MODEL_C. Three different builds that are managed at compile time by defining MODEL macro as MODEL_A, MODEL_B or MODEL_C.
For each model, I could have a different features set. FEATURE_1, FUTURE_2, FUTURE_3, ...
#if MODEL == MODEL_A
# define FEATURE_1 1
# define FEATURE_2 0
# define FEATURE_3 0
#elif MODEL == MODEL_B
# define FEATURE_1 0
# define FEATURE_2 1
# define FEATURE_3 0
#elif MODEL == MODEL_C
# define FEATURE_1 1
# define FEATURE_2 1
# define FEATURE_3 1
#endif
Now, on the full-featured model (MODEL_C) I could write:
if (key == 1) {
...
} else if (key == 2) {
...
} else if (key == 3) {
...
} else {
...
}
However, for MODEL_A I should have:
if (key == 1) {
...
} else {
...
}
For MODEL_B I should have:
if (key == 2) {
...
} else {
...
}
This is the scenario.
I thought using if(0) or if(1), but many times I receive some warnings from the compiler (condition is always true or condition is always false).