Deutsch   English   Français   Italiano  
<vr15ti$rtjs$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: pozz <pozzugno@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: Concatenated if and preprocessor
Date: Fri, 14 Mar 2025 13:02:59 +0100
Organization: A noiseless patient Spider
Lines: 77
Message-ID: <vr15ti$rtjs$1@dont-email.me>
References: <vquuhg$34o8d$2@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Fri, 14 Mar 2025 13:03:00 +0100 (CET)
Injection-Info: dont-email.me; posting-host="e5e0fe066aa49a10d2e00a72828e1842";
	logging-data="915068"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+nphgRpaTxsE7u2kWD/LIhzuXx7/tOk5Q="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:9s4oaJDWkyRuEuatbjJKyP/CrWI=
In-Reply-To: <vquuhg$34o8d$2@dont-email.me>
Content-Language: it
Bytes: 2766

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).