C-C++ Beautifier HOW-TO <author>Al Dev (Alavoor Vasudevan) <htmlurl url="mailto:alavoor@yahoo.com" name="alavoor@yahoo.com"> <date>v7.0, 5 Sep 2000 <trans>이호연<url url="mailto:guru2k@kldp.org" name="guru2k@kldp.org"> <abstract> 이 문서는 C/C++ 프로그램을 형식화 하는 것(아름답게)을 도울 것이다. 그래서 당신의 C/C++ 프로그램 코딩 표준이 더 읽기 쉽고 정확할 것이다. 이 문서의 정보는 모든 운영체제에서 사용할 수 있다 - 리눅스, MS DOS, Windows 95/NT, OS/2, IBM OSes, Unix like 솔라리스의 모든 풍미, HPUX, AIX, SCO, Sinix, BSD, SCO, 기타.. 그리고 그외 "C" 컴파일러가 지원되는 모든 운영체제들 (이것은 이 행성의 거의 모든 운영체제를 의미한다!). </abstract> <toc> <sect>소개 <p> C/C++ 이나 다른 언어에서 표준 코딩은 프로그램을 프로그래머에 의해 더 읽기 쉽고/이해하기 쉽게 만들기 위해서는 필수이다. 이 목적을 달성하기 위한 C/C++을 아름답게 하는 (형식화하는 툴) 이 있다. 코드를 형식화 하는 것(아름답게)을 <bf>2번</bf>하는 것은 프로그래머의 <bf>생산력</bf>을 향상시킨다!! 리눅스/유닉스에는 <bf>"indent"</bf> 와 <bf>"cb"</bf> 라 불리는 명령이 있다. "man indent" 와 "man cb" 를 참조해라. <bf>indent</bf>와 <bf>cb</bf> 작업은 오직 "C" 프로그램을 위한 것이다. "C++" 프로그램을 위해서는 <bf>"bcpp"</bf> 를 사용하라. 밑에 있는 곳에서 아름답게 하는 프로그램을 다운로드 하라. <itemize> <item>C++ : BCPP 사이트는 <url url="http://dickey.his.com/bcpp/bcpp.html"> 혹은 <url url="http://www.clark.net/pub/dickey"> 이다. <item>C++ : BCPP ftp 사이트는 <url url="ftp://dickey.his.com/bcpp/bcpp.tar.gz"> 이다. <item>C++ : <url url="http://www.consultix-inc.com/c++b.html"> <item>C : <url url="http://www.chips.navy.mil/oasys/c/"> <item>C++ : <url url="http://www.semdesigns.com/Products/DMS/DMSToolkit.html"> </itemize> 나는 C++ 프로그램을 형식화 하기 위해서 BCPP를 썼고 작동이 잘되었다. 당신은 다른 툴을 확인하기를 원할지도 모르고 당신이 제일 좋아 할 것을 쓰라. BCPP는 <htmlurl url="mailto:steve@alpha.ocbbs.gen .nz" name="steve@alpha.ocbbs.gen.nz"> 에 있는 Steven De Toni에 의해 쓰여졌다. <sect> 내가 어떻게 아름답게 하는 프로그램을 믿을 수 있는가??!! <p> 당신은 아름답게 하는 프로그램을 입증하고 신뢰하게 하는 <bf>과학적인</bf> 방법이 필요하다고 100% 장담한다. 방법을 서술할 것이다. 아름답게 하는 프로그램을 "훌륭하다고 믿고" 확실하다고 받아들이게 하려고 이 부분에서는 방법을 서술할 것이다. <bf>BCPP</bf>같은 아름답게 하는 프로그램이 사실임을 입증하기 위해서, <bf>indent</bf> 혹은 <bf>cb</bf> 는 입력받은 소스코드를 형식화한 후 피해나 변경하지 않는다, 당신은 "검증 프로그램" 셸 스크립트를 사용하거나 다음의 기법을 사용할 수 있다 - 컴파일러를 이용해서 최초의 입력받은 소스 코드로 부터 오브젝트 코드를 생성하라 - <code> g++ -c myprogram.cpp </code> 여기서 g++ 은 GNU C++ 컴파일러이다. 이것은 myprogram.o 라는 오브젝트 파일을 만들 것이다. 이 파일을 지켜라 - <code> mv myprogram.o myprogram_orig.o </code> bcpp를 실행시켜라 - <code> bcpp myprogram.cpp </code> 이 것은 형식화된 출력 프로그램 파일인 myprogram.cpp을 만들것이고 원래의 파일을 myprogram.cpp.orig로 만들 것이다. 새 파일을 컴파일 해라 - <code> g++ -c myprogram.cpp </code> 지금 두개의 오브젝트 파일을 비교하기 위해서 유닉스의 "diff" 명령을 사용해라 - <code> diff myprogram.o myprogram_orig.o </code> 이 파일 둘 다 같을 것을 것이다. bcpp는 완벽하게 작업한다는 것을 검증 했다. DOS나 Windows 95 에서 당신이 자유로운 <url name="Cygnus" url="http://www.cygnus.com"> 인 Cygwin 를 사용하기 원할 것이다. 또한 당신은 컴파일러 에서 오브젝트 출력 대신에 어셈블러 출력을 사용할 수도 있다. 다음과 같이 - <code> g++ -S myprogram.cpp </code> 이것은 myprogram.s를 만든다. 검증 하려면 - <code> diff myprogram.s myprogram_orig.s </code> 이 스텝은 당신의 값진 소스 코드는 손상되지 않고 bcpp는 오직 올바른 형식화 작업만 하고 당신의 코드에 어떤 방법으로든 절대로 변경이나 피해를 하지 않는다는 것을 100% 보증한다. 이 방법은 'bcpp' 같은 아름답게 하는 프로그램은 전문어의 특성을 장담하고 보증하게 할 것이다. 이 두개의 스텝은 항상 당신이 <bf>bcpp</bf>, <bf>indent</bf> 혹은 <bf>cb</bf>같은 아름답게 하는 프로그램을 사용하도록 강력하게 추천한다. <sect> 다른 언어를 위한 아름답게 하는 프로그램 <p> HTML, SQL, Java, Perl, Fortran 같이 다른 언어를 위한 아름답게 하는 프로그램을 얻기 위해서는 아래의 사이트에 방문해라. <itemize> <item> HTML : <url url="http://www.digital-mines.com/htb/"> <item> HTML : <url url="http://www.datacomm.ch/mwoog/software/perl/beautifier.html"> <item> HTML : <url url="http://www.watson-net.com/free/perl/s_fhtml.asp"> <item> SQL : <url url="http://www.netbula.com/products/sqlb"> <item> Java, SQL, HTML, C++ : <url url="http://www.semdesigns.com/Products/DMS/DMSToolkit.html"> <item> Java : <url url="http://home.wtal.de/software-solutions/jindent/frameset.html"> <item> Java JPretty : <url url="http://www.mmsindia.com/index.html"> <item> Perl : <url url="http://www.consultix-inc.com/www.consultix-inc.com/talk.htm"> <item> Perl : <url url="http://www.consultix-inc.com/www.consultix-inc.com/perl_beautifier.html"> <item> Fortran beautifier : <url url="http://www.aeem.iastate.edu/Fortran/tools.html"> <item>C++ : BCPP site is at <url url="http://www.clark.net/pub/dickey/bcpp/bcpp.html"> <item>C++ : <url url="http://www.consultix-inc.com/www.consultix-inc.com/c++b.html"> <item>C : <url url="http://www.chips.navy.mil/oasys/c/"> </itemize> <itemize> <item>아름답게 하는 프로그램의 백서 : <url url="http://www.consultix-inc.com/www.consultix-inc.com/talk.htm"> </itemize> HTML을 사용하여 전시하기 위한 코드의 프리젠테이션을 만든려면 - <itemize> <item>html로 프리젠테이션 (C,C++,Java) : <url url="http://www.perlstudio.de/cbindex.html"> </itemize> 또한 <url url="http://www.yahoo.com"> 혹은 <url url="http://www.lycos.com"> 같은 검색엔진에서 "beautfier"이라는 키워드로 찾아보라. <sect> 검정 스크립트 <p> 이 것은 아름답게 하는 프로그램을 검증하기 위한 콘셸 스크립트이다. 리눅스 'contrib' 시디롬에 있는 "pdksh*.rpm" 이 필요하다. 이 파일을 '텍스트' 파일과 a+rx로 저장해라. 당신은 펄로 이 셸 스크립트를 다시 쓸 수 있어서 당신은 Windows 95/NT 혹은 MSDOS 에서 그것을 쓸 수 있다. <bf>bcpp</bf>, <bf>cb</bf> 혹은 <bf>indent</bf>를 위한 포인트 PRGM 변수를 설명해라. <code> #!/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 </code> <sect> 관련 URL <p> 아래에 있는 C, C++ 관련 사이트를 방문하라 - <itemize> <item> <url url="http://metalab.unc.edu/LDP/HOWTO/Vim-HOWTO.html" name="C++, C를 위한 Vim 컬러 텍스트 에디터"> <item> <url url="http://metalab.unc.edu/LDP/HOWTO/C++Programming-HOWTO.html" name="C++ Programming HOWTO"> <item> <url url="http://metalab.unc.edu/LDP/HOWTO/CVS-HOWTO.html" name="CVS HOWTO for C++ programs"> <item> Linux goodies 메인 사이트 <url url="http://www.aldev.8m.com"> <item> Linux goodies 미러 사이트 <url url="http://aldev.webjump.com"> </itemize> <sect> 이 문서의 다른 형식 <p> 이 문서는 11개의 다른 형식으로 출판된다. 자세히 말하면 - DVI, Postscript, Latex, Adobe Acrobat PDF, LyX, GNU-info, HTML, RTF(Rich Text Format), Plain-text, Unix man pages and SGML. <itemize> <item> HTML, DVI, Postscript와 SGMl 형식은 다음의 사이트에서 구할 수 있다 - <url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/other-formats/"> <item>텍스트 형식은 다음의 사이트에서 구할 수 있다 - <url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO"> <item>프랑스어, 독일어, 스페인어, 중국어, 일본어 같이 다른 언어로 된 번역본은 다음의 사이트에서 구할 수 있다. <url url="ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO"> 다른 언어로 번역하기 위한 어떠한 도움도 환영하는 바이다. </itemize> 이 문서는 다음의 사이트에서 구할 수 있는 "SGML-Tools"라는 툴을 써서 만들었다. <url url="http://www.sgmltools.org"> 당신이 다음의 명령을 써서 소스로 부터 컴파일 할 수 있다. <itemize> <item>sgml2html C-C++Beautifier-HOWTO.sgml (html 파일을 생성) <item>sgml2rtf C-C++Beautifier-HOWTO.sgml (RTF 파일을 생성) <item>sgml2latex C-C++Beautifier-HOWTO.sgml (latex 파일을 생성) </itemize> LaTeX 문서는 PDF 파일로 <bf>sgml2latex</bf>(그리고 dvips)의 출력으로 Postscript 파일을 만들고 Acrobet <bf>distill</bf> ( <url url="http://www.adobe.com"> )을 다음의 명령어를 통해서 간단히 변형시킬 수 있다. <code> 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 & </code> 혹은 Ghostscript의 <bf>ps2pdf</bf> 명령어로 할 수 있다. ps2pdf는 Adobe의 Acrobat Distiller의 모든 기능을 거의 똑 같이 수행한다: PostScript 파일을 Portable Document Format(PDF) 파일로 변형시킨다. <bf>ps2pdf</bf>는 <bf>pdfwrite</bf>라고 불리우는 특별한 "출력 장치"를 골라내는 Ghostscript를 사용하는 매우 작은 명령어 스크립트 (배치 파일) 도구이다. ps2pdf를 사용 하려면, <bf>pdfwrite</bf> 장치는 Ghostscript가 컴파일 되었을 때 makefile안에 포함되어 있어야 한다. Ghostscript의 설치 항목이 있는 문서를 봐라. 이 문서는 여기에 있다 - <itemize> <item> <url url="http://sunsite.unc.edu/LDP/HOWTO/C-C++Beautifier-HOWTO.html"> </itemize> 또한 다음의 미러 사이트에서 이 문서를 찾을 수 있다 - <itemize> <item> <url url="http://www.caldera.com/LDP/HOWTO/C-C++Beautifier-HOWTO.html"> <item> <url url="http://www.WGS.com/LDP/HOWTO/C-C++Beautifier-HOWTO.html"> <item> <url url="http://www.cc.gatech.edu/linux/LDP/HOWTO/C-C++Beautifier-HOWTO.html"> <item> <url url="http://www.redhat.com/linux-info/ldp/HOWTO/C-C++Beautifier-HOWTO.html"> <item> 다른 당신 가까이(네트워크 주소) 있는미러 사이트 <url url="http://sunsite.unc.edu/LDP/hmirrors.html"> 에서 /LDP/HOWTO/C-C++Beautifier-HOWTO.html로 가라. </itemize> dvi 형식의 문서를 보기 위해서는, xdvi 프로그램을 써야 한다. xdvi 프로그램은 ControlPanel | Applications | Publishing | TeX 메뉴 버튼에서 찾을 수 있는 tetex-xdvi*.rpm 패키지로 레드햇 리눅스에 있다. dvi 문서를 읽기 위해서는 명령을 실행해라 - <tscreen><verb> xdvi -geometry 80x90 howto.dvi man xdvi </verb></tscreen> 그리고 마우스로 창의 크기를 바꿔라. 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 같은 다른 플랫폼에서도 이용 가능하다. <itemize> <item>Windows 95, OS/2 그리고 다른 운영체제용 Ghostscript는 다음의 사이트에서 구할 수 있다. <url url="http://www.cs.wisc.edu/~ghost"> </itemize> postscript 문서를 읽이 위해서는 다음의 명령어를 사용하라 - <tscreen><verb> gv howto.ps ghostscript howto.ps </verb></tscreen> 당신은 Netscape Navigator, Microsoft Internet explorer, Redhat Baron Web browser 혹은 다른 어떤 브라우져를 써서 HTML 형식의 문서를 읽을 수 있다. 당신은 latex로 "X-Windows" 의 앞부분을 LyX를 써서 LyX를 출력해서 latex를 읽을 수 있다. <sect> Copyright <p> 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. </article>