2013-09-27 7 views
1

Fortran 코드에서 m4를 사용하여 매개 변수 파일에 정의 된 플래그를 기반으로 특정 코드를 생성합니다.M4의 ifdef를 사용한 트리플 조건부 체크

전 처리가 거의 없으므로 M4를 잘 모릅니다. 등고선, 순 환상, 3 가지 경우를 기반으로 사물을 정의해야하는 코드를 작성하려고합니다. 내가 코드를 컴파일 할 때, 그것은과 (등온 및 순압 정의없이) 뭔가를 (3)] [(1) 일을 할] 등온 괜찮 컴파일 이제

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

: 나는 다음과 같은 코드를 썼습니다. 그러나 내가 중압 성을 정의 할 때 [무언가를하십시오 (2)] 대신 [무언가 (3)]로 돌아갑니다.

m4에서 이러한 상황을 처리하는 방법에 대한 지침이 있습니까?

감사합니다.

답변

1

downvote와 의견에 자극을 받으면 내 질문에 대한 이해가 잘못되었다는 것을 알 수 있습니다. 그래서 m4을 다운로드하고 내 대답을 수정했습니다.

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() 트릭을 할 것 같다!

#ifdef는 C 전 처리기 기능입니다. ifdef (name, string, optional string)는 m4 버전입니다.