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