· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/C-C++Beautifier-HOWTO

C-C++ Beautifier HOW-TO

C-C++ Beautifier HOW-TO

Al Dev (Alavoor Vasudevan) alavoor@yahoo.com

v7.0, 5 Sep 2000 이호연 guru2k@kldp.org
이 문서는 C/C++ 프로그램을 형식화 하는 것(아름답게)을 도울 것이다. 그래서 당신의 C/C++ 프로그램 코딩 표준이 더 읽기 쉽고 정확할 것이다. 이 문서의 정보는 모든 운영체제에서 사용할 수 있다 - 리눅스, MS DOS, Windows 95/NT, OS/2, IBM OS들, Unix like 솔라리스의 모든 풍미, HPUX, AIX, SCO, Sinix, BSD, SCO, 기타.. 그리고 그외 "C" 컴파일러가 지원되는 모든 운영체제들 (이것은 이 행성의 거의 모든 운영체제를 의미한다!).

1. 소개

C/C++ 이나 다른 언어에서 표준 코딩은 프로그램을 프로그래머에 의해 더 읽기 쉽고/이해하기 쉽게 만들기 위해서는 필수이다. 이 목적을 달성하기 위한 C/C++을 아름답게 하는 (형식화하는 툴) 이 있다. 코드를 형식화 하는 것(아름답게)을 2번하는 것은 프로그래머의 생산력을 향상시킨다!!

리눅스/유닉스에는 "indent""cb" 라 불리는 명령이 있다. "man indent" 와 "man cb" 를 참조해라. indentcb 작업은 오직 "C" 프로그램을 위한 것이다. "C++" 프로그램을 위해서는 "bcpp" 를 사용하라. 밑에 있는 곳에서 아름답게 하는 프로그램을 다운로드 하라.

나는 C++ 프로그램을 형식화 하기 위해서 BCPP를 썼고 작동이 잘되었다. 당신은 다른 툴을 확인하기를 원할지도 모르고 당신이 제일 좋아 할 것을 쓰라.

BCPP는 steve@alpha.ocbbs.gen.nz 에 있는 Steven De Toni에 의해 쓰여졌다.

2. 내가 어떻게 아름답게 하는 프로그램을 믿을 수 있는가??!!

당신은 아름답게 하는 프로그램을 입증하고 신뢰하게 하는 과학적인 방법이 필요하다고 100% 장담한다. 방법을 서술할 것이다. 아름답게 하는 프로그램을 "훌륭하다고 믿고" 확실하다고 받아들이게 하려고 이 부분에서는 방법을 서술할 것이다.

BCPP같은 아름답게 하는 프로그램이 사실임을 입증하기 위해서, indent 혹은 cb 는 입력받은 소스코드를 형식화한 후 피해나 변경하지 않는다, 당신은 "검증 프로그램" 셸 스크립트를 사용하거나 다음의 기법을 사용할 수 있다 -

컴파일러를 이용해서 최초의 입력받은 소스 코드로 부터 오브젝트 코드를 생성하라 -


  g++ -c myprogram.cpp

여기서 g++ 은 GNU C++ 컴파일러이다. 이것은 myprogram.o 라는 오브젝트 파일을 만들 것이다.

이 파일을 일단 백업시킨다 -


   mv myprogram.o myprogram_orig.o

bcpp를 실행시켜라 -


   bcpp myprogram.cpp

이 것은 형식화된 출력 프로그램 파일인 myprogram.cpp을 만들것이고 원래의 파일을 myprogram.cpp.orig로 만들 것이다. 새 파일을 컴파일 해라 -
   g++ -c myprogram.cpp

지금 두개의 오브젝트 파일을 비교하기 위해서 유닉스의 "diff" 명령을 사용해라 -


   diff myprogram.o myprogram_orig.o

이 파일 둘 다 같을 것을 것이다. bcpp는 완벽하게 작업한다는 것을 검증 했다. DOS나 Windows 95 에서 당신이 자유로운 Cygnus 인 Cygwin 를 사용하기 원할 것이다.

또한 당신은 컴파일러 에서 오브젝트 출력 대신에 어셈블러 출력을 사용할 수도 있다. 다음과 같이 -


    g++ -S myprogram.cpp

이것은 myprogram.s를 만든다. 검증 하려면 -
    diff myprogram.s myprogram_orig.s

이 스텝은 당신의 값진 소스 코드는 손상되지 않고 bcpp는 오직 올바른 형식화 작업만 하고 당신의 코드에 어떤 방법으로든 절대로 변경이나 피해를 하지 않는다는 것을 100% 보증한다. 이 방법은 'bcpp' 같은 아름답게 하는 프로그램은 전문어의 특성을 장담하고 보증하게 할 것이다.

이 두개의 스텝은 항상 당신이 bcpp, indent 혹은 cb같은 아름답게 하는 프로그램을 사용하도록 강력하게 추천한다.

3. 다른 언어를 위한 아름답게 하는 프로그램

HTML, SQL, Java, Perl, Fortran 같이 다른 언어를 위한 아름답게 하는 프로그램을 얻기 위해서는 아래의 사이트에 방문해라.

HTML을 사용하여 전시하기 위한 코드의 프리젠테이션을 만든려면 -

또한 http://www.yahoo.com 혹은 http://www.lycos.com 같은 검색엔진에서 "beautfier"이라는 키워드로 찾아보라.

4. 검증 스크립트

이 것은 아름답게 하는 프로그램을 검증하기 위한 콘셸 스크립트이다. 리눅스 'contrib' 시디롬에 있는 "pdksh*.rpm" 이 필요하다. 이 파일을 '텍스트' 파일과 a+rx로 저장해라. 당신은 펄로 이 셸 스크립트를 다시 쓸 수 있어서 당신은 Windows 95/NT 혹은 MSDOS 에서 그것을 쓸 수 있다. bcpp, cb 혹은 indent를 위한 포인트 PRGM 변수를 설명해라.


#!/bin/ksh

# Verification program to check C++ Beautifiers 'bcpp', 'indent' or cb
############################################################
# Copyright 
# The copyright policy is GNU/GPL.
# Author: Al Dev (Alavoor Vasudevan) alavoor@yahoo.com
############################################################

check_beautify_now()
{
        # Remove all the temp files....
        \rm -f ${TMP_FILE}
        \rm -f ${TMP_CPPFILE}*.*

        FNAME=$1
        if [ ! -f ${FNAME} ]; then
                print "\nError: The file ${FNAME} does not exist!!. Aborting now ...."
                exit
        fi
        \cp  -f ${FNAME} ${TMP_CPPFILE}.cpp
        ${COMPILER} -c ${TMP_CPPFILE}.cpp
        if [ ! -f ${TMP_CPPFILE}.o ]; then
                print "Fatal Error: Failed to compile ${FNAME}. Aborting now... "
                exit
        fi
        \mv -f ${TMP_CPPFILE}.o ${TMP_CPPFILE}_orig.o

        aa=`basename $PRGM`
        print "\nRunning, verifying $aa on ${FNAME}"
        ${PRGM} ${TMP_CPPFILE}.cpp
        ${COMPILER} -c ${TMP_CPPFILE}.cpp
        \rm -f $TMP_FILE
        diff ${TMP_CPPFILE}.o ${TMP_CPPFILE}_orig.o 1> $TMP_FILE 2>> $TMP_FILE
        result=""
        result=`wc -c $TMP_FILE | awk '{print $1}' `
        if [ "$result" = "0" ]; then
                print "Success!! Beautifier $aa is working properly!!\n"
        else
                print "Fatal Error: Something wrong!! Beautifier is not working!!"
                exit
        fi
#       ${COMPILER} -S ${TMP_CPPFILE}.cpp
#       diff ${TMP_CPPFILE}.s ${TMP_CPPFILE}_orig.s

        # Remove all the temp files....
        \rm -f ${TMP_FILE}
        \rm -f ${TMP_CPPFILE}*.*
}

########## Main of program begins here ##################3
#PRGM=/usr/bin/bcpp
#PRGM=/usr/bin/cb
PRGM=/usr/bin/indent
COMPILER=/usr/bin/g++

TMP_FILE=beautify.tmp
TMP_CPPFILE=beautify-tmp_cppfile

print -n "Enter the C++ file name <default is *.cpp> : "
read ans
if [ "$ans" = "" -o "$ans" = " " ]; then
        ans="ALL"
else
        FILENAME=$ans
fi

# Remove all the temp files....
\rm -f ${TMP_FILE}
\rm -f ${TMP_CPPFILE}*.*

if [ "$ans" != "ALL" ]; then
        check_beautify_now ${FILENAME}
else
        ls *.cpp |
        while read FILENAME 
        do
                check_beautify_now ${FILENAME}
        done
fi

5. 관련 URL

아래에 있는 C, C++ 관련 사이트를 방문하라 -

6. 이 문서의 다른 형식

이 문서는 11개의 다른 형식으로 출판된다. 자세히 말하면 - DVI, Postscript, Latex, Adobe Acrobat PDF, LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-text, Unix man pages and SGML.

이 문서는 다음의 사이트에서 구할 수 있는 "SGML-Tools"라는 툴을 써서 만들었다. http://www.sgmltools.org 당신이 다음의 명령을 써서 소스로 부터 컴파일 할 수 있다.
  • sgml2html C-C++Beautifier-HOWTO.sgml (html 파일을 생성)
  • sgml2rtf C-C++Beautifier-HOWTO.sgml (RTF 파일을 생성)
  • sgml2latex C-C++Beautifier-HOWTO.sgml (latex 파일을 생성)

LaTeX 문서는 PDF 파일로 sgml2latex(그리고 dvips)의 출력으로 Postscript 파일을 만들고 Acrobet distill ( http://www.adobe.com )을 다음의 명령어를 통해서 간단히 변형시킬 수 있다.


bash$ man sgml2latex
bash$ sgml2latex filename.sgml
bash$ man dvips
bash$ dvips -o filename.ps filename.dvi
bash$ distill filename.ps
bash$ man ghostscript
bash$ man ps2pdf
bash$ ps2pdf input.ps output.pdf
bash$ acroread output.pdf &

혹은 Ghostscript의 ps2pdf 명령어로 할 수 있다. ps2pdf는 Adobe의 Acrobat Distiller의 모든 기능을 거의 똑 같이 수행한다: PostScript 파일을 Portable Document Format(PDF) 파일로 변형시킨다. ps2pdfpdfwrite라고 불리우는 특별한 "출력 장치"를 골라내는 Ghostscript를 사용하는 매우 작은 명령어 스크립트 (배치 파일) 도구이다. ps2pdf를 사용 하려면, pdfwrite 장치는 Ghostscript가 컴파일 되었을 때 makefile안에 포함되어 있어야 한다. Ghostscript의 설치 항목이 있는 문서를 봐라.

이 문서는 여기에 있다 -

또한 다음의 미러 사이트에서 이 문서를 찾을 수 있다 -

dvi 형식의 문서를 보기 위해서는, xdvi 프로그램을 써야 한다. xdvi 프로그램은 ControlPanel | Applications | Publishing | TeX 메뉴 버튼에서 찾을 수 있는 tetex-xdvi*.rpm 패키지로 레드햇 리눅스에 있다. dvi 문서를 읽기 위해서는 명령을 실행해라 -

        xdvi -geometry 80x90 howto.dvi
        man xdvi
그리고 마우스로 창의 크기를 바꿔라. xdvi의 맨페이지를 보라. Page Up, Page Down keys 같은 화살표 키를 써라, 또한 위로, 아래로, 가운데로, 다음 페이지로, 이전 페이지 기타를 위해서 f, d, u, c, l, r, p, n 문자 키도 쓸 수 있다. 전문가 메뉴로 가려면 'x'를 누르라.

당신은 포스트스크립트 파일을 'gv' (ghostview) 라는 고스트스크립트 프로그램은 ghostscript.rpm 패키지 혹은 레드햇 리눅스의 gv 프로그램 ControlPanel | Applications | Graphics 메뉴 버튼에 있는 gv*.rpm 패키지의 프로그램을 써서 읽을 수 있다. gv 프로그램은 고스트스크립트에 비해 더 친절하다. 고스트스크립트와 gv는 또한 다른 OS/2, Windows 95 그리고 NT 같은 다른 플랫폼에서도 이용 가능하다.

postscript 문서를 읽이 위해서는 다음의 명령어를 사용하라 -

                gv howto.ps
                ghostscript howto.ps

당신은 Netscape Navigator, Microsoft Internet explorer, Redhat Baron Web browser 혹은 다른 어떤 브라우져를 써서 HTML 형식의 문서를 읽을 수 있다.

당신은 latex로 "X-Windows" 의 앞부분을 LyX를 써서 LyX를 출력해서 latex를 읽을 수 있다.

7. Copyright

Copyright policy is GNU/GPL as per LDP (Linux Documentation project). LDP is a GNU/GPL project. Additional restrictions are - you must retain the author's name, email address and this copyright notice on all the copies. If you make any changes or additions to this document then you should intimate all the authors of this document.


ID
Password
Join
"Perl is executable line noise, Python is executable pseudo-code."


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2004-01-12 02:31:31
Processing time 0.0029 sec