2013-09-27 4 views
1

Я использую m4 в коде fortran для генерации определенного кода на основе флагов, определенных в файле параметров.Тройная условная проверка с помощью ifdef в M4

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

#ifdef isothermal 
    do something (1) 
#elif barotropic 
    do something (2) 
#else 
    do something (3) 
#endif 

Теперь, когда я скомпилировать код, он компилирует нормально с изотермическим [сделать что-то (1)] и (без изотермического и баротропного определенного) [делать что-то (3)]. Но когда я определяю баротропный, он возвращается к [сделать что-то (3)] вместо [сделать что-то (2)].

Любые указатели на то, как бороться с такой ситуацией в m4?

Спасибо!

ответ

1

Подчеркнутый нисходящий и комментарий, я вижу, что мое понимание вопроса было ошибочным. Поэтому я загрузил m4 и переработал свой ответ. Вложенный ifdef(), кажется, сделать трюк:

ifdef(`isothermal',do something (1),ifdef(`barotropic',do something (2),do something (3))) 

Сохранение этого в файле triplecond.f и обработки с m4:

 
$ m4 triplecond.f 
do something (3) 

$ m4 -Disothermal triplecond.f 
do something (1) 

$ m4 -Dbarotropic triplecond.f 
do something (2) 

$ 
+1

Это работает! Изменил мой downvote на upvote. – Demi

0

m4 НЕ CPP!

#ifdef является препроцессором C. ifdef (имя, строка, необязательная строка) - версия m4.

Смежные вопросы