Re: Concatenated if and preprocessor

Liste des GroupesRevenir à cl c 
Sujet : Re: Concatenated if and preprocessor
De : tr.17687 (at) *nospam* z991.linuxsc.com (Tim Rentsch)
Groupes : comp.lang.c
Date : 14. Mar 2025, 17:44:16
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <86frjfsgtb.fsf@linuxsc.com>
References : 1 2
User-Agent : Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
pozz <pozzugno@gmail.com> writes:

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

So your question is not a language question but how to avoid
implemenation-specific warnings?  It would have been good to
explain that at the beginning.

My first suggestion is to just turn off the damn warning.  Any
compiler that gives a "condition always false" warning on 'if(0)'
is one best avoided.

Having said that, here is an alternative:

  for(  int just_once = 1;  just_once;  just_once = 0  ){
    #if FEATURE_1
      if(  condition_1  ){
        ...
        break;
      }
    #endif

    #if FEATURE_2
      if(  condition_2  ){
        ...
        break;
      }
    #endif

    #if FEATURE_3
      if(  condition_3  ){
        ...
        break;
      }
    #endif

      ... default code goes here ...

  }

Test compiles at optimization level -O1 shows gcc and clang are both
smart enough to optimize the for(...) out of existence, leaving
just the enabled if() sections.

Date Sujet#  Auteur
13 Mar 25 * Concatenated if and preprocessor26pozz
13 Mar 25 +- Re: Concatenated if and preprocessor1David Brown
13 Mar 25 +- Re: Concatenated if and preprocessor1James Kuyper
13 Mar 25 +- Re: Concatenated if and preprocessor1Kaz Kylheku
13 Mar 25 +- Re: Concatenated if and preprocessor1bart
13 Mar 25 +* Re: Concatenated if and preprocessor3Tim Rentsch
14 Mar 25 i`* Re: Concatenated if and preprocessor2Lynn McGuire
14 Mar 25 i `- Re: Concatenated if and preprocessor1Tim Rentsch
13 Mar 25 +- Re: Concatenated if and preprocessor1James Kuyper
14 Mar 25 `* Re: Concatenated if and preprocessor17pozz
14 Mar 25  +- Re: Concatenated if and preprocessor1David Brown
14 Mar 25  +- Re: Concatenated if and preprocessor1Dan Purgert
14 Mar 25  +* Re: Concatenated if and preprocessor12Tim Rentsch
14 Mar 25  i`* Re: Concatenated if and preprocessor11Richard Harnden
14 Mar 25  i +* Re: Concatenated if and preprocessor9Tim Rentsch
14 Mar 25  i i`* Re: Concatenated if and preprocessor8Keith Thompson
14 Mar 25  i i +* Re: Concatenated if and preprocessor3Richard Harnden
14 Mar 25  i i i`* Re: Concatenated if and preprocessor2Tim Rentsch
15 Mar 25  i i i `- Re: Concatenated if and preprocessor1David Brown
14 Mar 25  i i +* Re: Concatenated if and preprocessor3Tim Rentsch
15 Mar 25  i i i`* Re: Concatenated if and preprocessor2Keith Thompson
15 Mar 25  i i i `- Re: Concatenated if and preprocessor1Tim Rentsch
15 Mar 25  i i `- Re: Concatenated if and preprocessor1David Brown
15 Mar 25  i `- Re: Concatenated if and preprocessor1Lawrence D'Oliveiro
14 Mar 25  +- Re: Concatenated if and preprocessor1Keith Thompson
15 Mar 25  `- Re: Concatenated if and preprocessor1James Kuyper

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal