Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > comp.lang.c > #391178

Re: Concatenated if and preprocessor

From Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups comp.lang.c
Subject Re: Concatenated if and preprocessor
Date 2025-03-14 09:44 -0700
Organization A noiseless patient Spider
Message-ID <86frjfsgtb.fsf@linuxsc.com> (permalink)
References <vquuhg$34o8d$2@dont-email.me> <vr15ti$rtjs$1@dont-email.me>

Show all headers | View raw


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.

Back to comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Concatenated if and preprocessor pozz <pozzugno@gmail.com> - 2025-03-13 16:44 +0100
  Re: Concatenated if and preprocessor David Brown <david.brown@hesbynett.no> - 2025-03-13 16:55 +0100
  Re: Concatenated if and preprocessor scott@slp53.sl.home (Scott Lurndal) - 2025-03-13 16:11 +0000
  Re: Concatenated if and preprocessor James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-03-13 12:07 -0400
  Re: Concatenated if and preprocessor Kaz Kylheku <643-408-1753@kylheku.com> - 2025-03-13 16:30 +0000
  Re: Concatenated if and preprocessor bart <bc@freeuk.com> - 2025-03-13 17:29 +0000
  Re: Concatenated if and preprocessor Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-03-13 14:37 -0700
    Re: Concatenated if and preprocessor Lynn McGuire <lynnmcguire5@gmail.com> - 2025-03-13 18:25 -0500
      Re: Concatenated if and preprocessor Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-03-14 09:26 -0700
  Re: Concatenated if and preprocessor James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-03-13 12:19 -0400
  Re: Concatenated if and preprocessor pozz <pozzugno@gmail.com> - 2025-03-14 13:02 +0100
    Re: Concatenated if and preprocessor David Brown <david.brown@hesbynett.no> - 2025-03-14 14:13 +0100
    Re: Concatenated if and preprocessor Dan Purgert <dan@djph.net> - 2025-03-14 13:44 +0000
    Re: Concatenated if and preprocessor Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-03-14 09:44 -0700
      Re: Concatenated if and preprocessor Richard Harnden <richard.nospam@gmail.invalid> - 2025-03-14 18:15 +0000
        Re: Concatenated if and preprocessor Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-03-14 13:40 -0700
          Re: Concatenated if and preprocessor Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2025-03-14 14:10 -0700
            Re: Concatenated if and preprocessor Richard Harnden <richard.nospam@gmail.invalid> - 2025-03-14 21:31 +0000
              Re: Concatenated if and preprocessor Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-03-14 15:29 -0700
                Re: Concatenated if and preprocessor David Brown <david.brown@hesbynett.no> - 2025-03-15 17:32 +0100
            Re: Concatenated if and preprocessor Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-03-14 15:57 -0700
              Re: Concatenated if and preprocessor Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2025-03-14 16:27 -0700
                Re: Concatenated if and preprocessor scott@slp53.sl.home (Scott Lurndal) - 2025-03-15 15:06 +0000
                Re: Concatenated if and preprocessor Tim Rentsch <tr.17687@z991.linuxsc.com> - 2025-03-15 08:49 -0700
                Re: Concatenated if and preprocessor scott@slp53.sl.home (Scott Lurndal) - 2025-03-15 17:28 +0000
            Re: Concatenated if and preprocessor David Brown <david.brown@hesbynett.no> - 2025-03-15 17:28 +0100
        Re: Concatenated if and preprocessor Lawrence D'Oliveiro <ldo@nz.invalid> - 2025-03-15 07:03 +0000
    Re: Concatenated if and preprocessor Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2025-03-14 11:10 -0700
    Re: Concatenated if and preprocessor James Kuyper <jameskuyper@alumni.caltech.edu> - 2025-03-14 23:20 -0400

csiph-web