UNIFDEF(1)

명칭
unifdef, unifdefall - 프리프로세서 조건행을 없앤다

서식
unifdef [-clst] [ -Ipath -Dsym[=val] -Usym -iDsym[=val] -iUsym] ... [file] unifdefall [-Ipath] ... file

해설
unifdef 유틸리티는 cpp(1) 의 조건 지시문 (사전 처리 지령)을 선택적으로 처리합니다. 파일로부터 삭제하도록(듯이) 특정된 지시문과 텍스트의 양쪽 모두를 삭제합니다. 그렇지 않은 경우는 파일을 그대로 해 둡니다.

unifdef 유틸리티는 #if, #ifdef, #ifndef, #elif, #else, #endif 행에 일합니다만, #if (와)과 #elif 행의 식 문법이 좋게 사용되는 부분집합 밖에 이해하지 않습니다. 명령행으로 정의된 심볼의 정수치나 defined() 오퍼레이터가 명령행으로 define 하거나 undefine 한 심볼이나 연산자!, <, >, <=, >=, ==,! =, &&, || (와)과 괄호로 둘러싸인 식을 취급할 수가 있습니다. 보다 복잡한 것은 그대로 상처가 없어 통과시킵니다. #ifdef (와)과 #ifndef 지시문은 심볼이 명령행으로 지정되었을 경우만 처리됩니다. 그 외의 경우에는 변경되지 않고 , 그냥 지나침 시킵니다.

unifdef 유틸리티에는 코멘트나 싱글 쿼트나 더블 쿼트로 둘러싸인 중에서 무효로 된 지시문도 이해할 수가 있습니다. 쿼트의 해석은 매우 심플합니다 : 열림 쿼트가 발견되었을 때, 닫고 쿠트가 발견될 때까지 (이스케이프 된 쿼트를 제외해) 모두 무시됩니다. 만약, backslash 없음의 개행이 발견되어도 경고하지 않습니다.

unifdefall 셸 스크립트는 파일로부터 cpp(1) 의 조건 처리 지시문을 모두 삭제할 수가 있습니다. 모든 제어 심볼과 그 정의 (또는 미정도리)의 리스트를 얻기 위해서(때문에), unifdef -s (와)과 cpp -dM (을)를 사용합니다. 그리고 그 파일을 처리하는데 적절한 인수를 붙여 unifdef (을)를 호출합니다.

이용 가능한 옵션 :
-Dsym[=val]
    정의되는 심볼을 지정합니다. 또, 옵션으로 #if (와)과 #elif 지시문을 조작하기 위해서 심볼에게 주는 값을 지정합니다.

-Usym
    미정도리로 하는 심볼을 지정합니다. 같은 심볼을 복수 지정했을 경우에는, 마지막에 지정된 것이 유효하게 됩니다.

-c  -c 플래그가 지정되었을 경우에는, unifdef 의 동작은 반대로 됩니다. 즉, 삭제될까 공백으로 되는 행을 남겨, 반대로 남길 것이었던 행을 삭제합니다.

-l  삭제되는 행을 삭제하는 대신에 공행에 옮겨놓습니다.

-s  통상의 입력 파일을 처리하는 대신에, 이 옵션은 unifdef 에 unifdef 하지만 이해하는 식에 나타난 심볼의 리스트를 생성시킵니다. 그것은, cpp(1) 의 -dM 옵션과 협력해 unifdef 의 명령행을 생성하는데 유용합니다.

-t  C 언어의 코멘트와 쿼트의 해석을 금지합니다. 통상의 텍스트 파일등에 unifdef (을)를 적용하는 경우에 유용합니다.

-iDsym[=val]
-iUsym
    #ifdef (을)를 무시합니다. C 언어의 코드로 #ifdef (을)를 코멘트나 만들다 만 코드와 같은 C 언어가 아닌 부분을 단락짓기 위해서(때문에) 이용하고 있는 경우는, unifdef 하지만 #ifdef 안의 쿼트나 코멘트를 해석하지 않게 어느 심볼이 그 목적으로 사용되고 있는지를 지시할 필요가 있습니다. 무시하는 심볼을 지시하는 방법은 -iDsym[=val] (이)나 -iUsym 그리고, 상기의 -Dsym[=val] (이)나 -Usym (와)과 같습니다.

-Ipath
    unifdefall 에 추가의 장소에 있다 #include 파일을 찾도록(듯이) 지시합니다. cpp(1) (와)과의 호환성과 unifdefall 의 실장을 간단하게 하기 위해서 unifdef (은)는 이 옵션은 무시합니다.

unifdef 유틸리티는 그 출력을 stdout 에 카피합니다. file 인수가 지정되지 않았던 경우는 stdin (으)로부터 읽어들입니다.

unifdef 유틸리티는 diff(1) 의 -Dsym 옵션과 함께 사용할 수가 있습니다.

관련 항목
cpp(1), diff(1)

진단

부적절한 elif, else, endif 를 검출합니다.

#ifdef 의 종료전에 EOF (을)를 검출했을 경우, 그 행 번호를 출력합니다.
unifdef 유틸리티는 출력이 입력과 같게 되는 경우 0, 그렇지 않으면 1, 에러시에는 2 를 종료 스테이터스로서 돌려줍니다.

버그
구문 평가가 매우 한정적입니다.

눌 캐릭터를 포함한 입력의 경우에는 올바르게 동작하지 않습니다.

역사
unifdef 하 4.3BSD (으)로부터 등장했습니다.