Способ переопределить макрос константы в одну строку, используя синтаксис C? - PullRequest
0 голосов
/ 10 марта 2020

Я хочу переопределить значение макро константы для определенного условия в моем C исходном коде. Я не могу использовать директивы условной предварительной обработки для определения LEN_OSG, потому что во время выполнения решается, переопределено ли оно другим значением или нет.

То, что у меня уже есть:

if(condition)                      // proof condition for replacing the value in LEN_OSG.
{
   if(LEN_OSG != CBS_LEN)          // check if LEN_OS already has the value in CBS_LEN.
   {
      #undef LEN_OSG               // undefine macro LEN_OSG by using `#undef` directive.
      #define LEN_OSG CBS_LEN      // recreate the macro LEN_OSG with new value.
   }
}

Позволяет ли синтаксис C сокращать это другим способом вместо использования директивы #undef, а затем воссоздавать макрос с новым значение другой директивой #define (всего одной строкой)?


Желаемое решение будет выглядеть примерно так:

if(LEN_OSG != CBS_LEN)          // check if LEN_OS already has the value in CBS_LEN.
{
   #redefine LEN_OSG CBS_LEN    // redefine LEN_OS with another value in one line. 
}

Ответы [ 2 ]

5 голосов
/ 10 марта 2020

Ваш код работает не так, как вы ожидаете. #define выполняется во время компиляции, поэтому вы должны использовать время компиляции #if с ним. В противном случае он всегда выполняется.

Также нет #redefine, поэтому необходимы две команды.

Если у вас есть условие времени выполнения, используйте обычную переменную и измените ее значение во время выполнения .

3 голосов
/ 10 марта 2020

Вы пытаетесь смешать выполнение кода во время выполнения с директивами препроцессора, то есть с вещами, которые оказывают влияние даже до компиляции.
Это не работает.

...