18. Tools and Resources



Q 18.1
도움이 될만한 프로그램이 필요합니다.
Answer
아래의 테이블을 참고하기 바랍니다 (덧붙여 질문 [*]18.16도 참고하시기 바랍니다.):

cross-reference generator cflow, cxref, calls, cscope, xscope, ixfw
C beautifier/pretty printer cb, indent, GNU indent, vgrind
버전/설정 관리 CVS, RCS, SCCS
C source obfuscator obfus, shroud, opqcp
``make'' dependency generator makedepend, cc -M, cpp -M
compute code metrics ccount, Metre, lcount, csize,
C lines-of-source counter wc, grep -c ";"
C declaration aid comp.sources.unix의 Volumn 14.
[K&R2] 참고
tracking down malloc problem 질문 [*]18.2 참고
``selective'' C preprocessor 질문 [*]10.18 참고
language translation tool 질문 [*]11.31 참고
C verifier (lint) 질문 [*]18.7 참고
C compiler 질문 [*]18.3 참고

(당연히 이 테이블이 모든 것을 나타내 주는 것은 아닙니다; 만약 여기에 나온 것 이외에 더 많은 것을 알고 있다면 관리자에게 연락하기 바랍니다.)

Usenet comp.compilerscomp.software-eng에서 여러 툴에 대한 다른 목록과, 논쟁을 찾아 볼 수 있습니다.

덧붙여 질문 [*]18.3, [*]18.16도 참고하시기 바랍니다.

Note
위 테이블의 code metric에 관한 것은 다음 URL을 참고하시기 바랍니다:

  http://www.qucis.queensu.ca/Software-Engineering/Cmetrics.html

GNU indent에 관한 것은 아래 URL을 참고하시기 바랍니다:

  http://www.gnu.org/software/indent/



Q 18.2
malloc에서 문제가 발생한 것 같은데 검사를 쉽게 해주는 툴은 없나요?

Answer
malloc 문제를 도와주는 여러가지 디버깅 패키지들이 있습니다. 인기있는 것 중의 하나는 conor p. Cahill씨의 ``dbmalloc''이며, 1992년 comp.sources.misc의 volumn 32에서 구할 수 있습니다. 또 comp.sources.unix volumn 27에서 얻을 수 있는 ``leak''도 좋습니다; JMalloc.c and JMalloc.h in the "Snippets" collection; and MEMDEBUG from ftp.crpht.lu in pub/sources/memdebug . See also question [*]18.16.

A number of commercial debugging tools exist, and can be invaluable in tracking down malloc-related and other stubborn problems:

Note
요즈음에는 다음과 같은 툴들이 인기가 많습니다:



Q 18.3
저렴하거나 공짜로 구할 수 있는 컴파일러가 있을까요?
Answer
인기있고, 공짜로 구할 수 있으며, 고 품질인 FSF의 GNU C 컴파일러 (또는 gcc라고 불리움)를 쓰면 됩니다. 이는 prep.ai.mit.edupub/gnu 디렉토리나 기타 GNU 아카이브 사이트에서 구할 수 있습니다. MS-DOS 용으로 포팅한 djgpp도 있으며, http://www.delorie.com/djgpp/에서 얻을 수 있습니다.

PCC라는 쉐어웨어(shareware) 컴파일러도 있으며, 이름은 PCC12C.ZIP입니다.

MS-DOS용 컴파일러로 매우 싼 가격에 구할 수 있는 Power C는 Mix Software에서 만들었고, 주소는 1132 Commerce Drive, Richardson, TX 75801, USA, 전화번호는 214-783-6001입니다.

최근에 개발된 컴파일러로는 lcc가 있습니다. Anonymous FTP로
ftp.cs.princeton.edupub/lcc에서 구할 수 있습니다.

ftp.hitech.com.auhitech/pacific에서 쉐어웨어 MS-DOS용 컴파일러를 구할 수 있습니다. 사고파는 목적이 아니라면 등록은 할 필요가 없습니다.

매킨토시 용으로 구할 수 있는 쉐어웨어 컴파일러는 알려진 것이 없습니다.

comp.compilers archive에는 compiler, interpreter, grammer등에 대한 굉장히 많은 정보가 들어 있습니다. (FAQ 리스트를 포함한) comp.compilers archive는 iecc.com에서 근무하는 moderator인 John R. Levine씨에 의해 관리되고 있습니다. 사용 가능한 컴파일러들과 이에 관련된 자료는 Mark Hopkins, Steven Robenalt, 그리고 David Muir Sharnoff씨에 의해 관리되며 ftp.idiom.compub/compilers-list/에 있습니다. (rtfm.mit.edu 또는 ftp.uu.netcomp.compilers 디렉토리에서 news.answers에 관한 아카이브도 참고하기 바랍니다; 질문 [*]20.40도 참고하기 바랍니다.)

Note
위 답변은 상대적으로 오래된 것입니다. GCC는 원래 ``GNU C Compiler''의 약자이었지만, C 언어 뿐만 아니라 C++, java와 같은 언어도 지원하기 때문에 이름이 ``GNU Compiler Collection''으로 이름이 바뀌었습니다. GCC와 더불어 GNU software를 구하시려면 ftp.gnu.org/pub/에서 구할 수 있으며, 국내에서는 ftp.bora.net/pub/gnu/에서 download 받는 것이 빠릅니다. 자세한 것은 GCC의 홈페이지인 아래 사이트를 방문하시면 얻을 수 있습니다:
  http://www.gnu.org/software/gcc/

lcc는 표준 C 언어로 씌여진, 이식성이 매우 우수한(retargetable) C 컴파일러이며, ALPHA, SPARC, MIPS R3000, Intel x86용 코드를 만들어 냅니다. lcc는 소스가 다른 컴파일러에 비해 상대적으로 짧고 읽기가 쉬워서 컴파일러 교육용으로 많이 쓰입니다. 아래 사이트를 방문하시면 좀 더 많은 정보를 얻을 수 있습니다:

  http://www.cs.princeton.edu/software/lcc/

덧붙여 질문 [*]18.16도 참고하시기 바랍니다.



Q 18.4
프로그램을 동작시켰는데, 매우 이상하게 동작합니다. 잘못된 점을 어떻게 찾을 수 있죠?

Answer
먼저 lint를 돌려보시기 바랍니다. (아마도 -a, -c, -h, -p 등의 옵션을 함께 써야 할 것입니다.) 대부분의 C 컴파일러는 완벽한 컴파일러가 아닙니다. 다른 말로, 만약 프로그래머가, 할 일을 명확하게 지시하지 않았거나, 지시한 사항이 동작한다고 보장할 수 없는 경우에 무시하고 넘어가는 경우가 많습니다. (그런 경우에도, 컴파일러가 제공하는 경고 메시지를 최대로 출력하도록 해 보기 바랍니다.)

덧붙여 질문 [*]16.5, [*]16.8, [*]18.7도 참고하시기 바랍니다.

References
[Darwin]



Q 18.5
`lint'를 실행시키면 malloc()을 부를 때마다 ``warning: possible pointer alignment problem''라는 경고가 발생하는데, 어떻게 이 경고좀 발생하지 않게 할 수 없을까요?

Answer
오래된 lint의 경우, malloc()이 ``어떠한 타입의 object도 저장할 수 있는 공간을 가리키는 포인터를 리턴한다''라는 사실을 모르기 때문에 그런 경고가 나옵니다. 한가지 방법은 #ifdef lint 안에 #define을 써서 malloc()에 대한 `pseudo-implementation'을 만들어 두는 것입니다. 그렇지만 정말로 중요한 경고 메시지도 보여주지 않을 가능성이 있기 때문에 좋은 방법이라 할 수는 없습니다. 차라리 `grep -v'를 써서 그런 메시지를 없애버리는 것이 훨씬 더 간단하고 안전할 것입니다. (그러나 `lint'가 보여주는 많은 메시지들을 무시하는 습관을 들이는 것은 매우 위험합니다. 어느날 중요한 메시지를 못 보고 넘어가는 경우도 생길지 모릅니다.)



Q 18.7
ANSI 호환의 lint를 구할 수 있을까요?
Answer
대부분 시스템에서 쓸 수 있는 `PC-Lint'와 `FlexeLint'가 있으며, 아래 주소에서 구할 수 있습니다:
  Gimpel Software
  3207 Hogarth Lane
  Collegeville, PA  19426  USA
  (+1) 610 584 4261
  gimpel@netaxs.com

Unix System V release 4의 lint는 ANSI 호환입니다. 그리고 UNIX Support Labs나 System V 판매업체에 의해 각각 다른 패키지 형태 (다른 C tool들이랑 같이 번들 형태)로 제공됩니다.

고수준으로 문법을 검사해주는 ANSI 호환의 다른 lint로는 `LCLint'가 있으며, larch.lcs.mit.edupub/Larch/lclint에서 구할 수 있습니다 (via anonymous ftp).

그리고 최근에 제공되는 많은 컴파일러들은 lint가 제공하는 것처럼 자세히 소스를 분석하고 알려주는 기능이 있습니다. (`gcc'의 경우는 `-Wall -pedantic' 옵션을 쓰면 됩니다.)

Note
lclint는 GPL18.1로 라이센스되어 있으며, 홈페이지는 다음과 같습니다:
  http://lclint.cs.virginia.edu/

2002년 이후, lclint는 splint로 이름을 바꾸었으며, 홈페이지는 다음과 같습니다:

  http://www.splint.org/



Q 18.8
ANSI function prototype이 있으니깐 이제 lint는 필요없지 않나요?
Answer

아닙니다. 무엇보다도 prototype은 존재하고 있고, 올바로 주어질 때에만 동작합니다; 잘못된 prototype은 아예 없는 것이 낫습니다. 두번째로 lint는 여러 소스 파일들을 읽고 일관성을 검사해 줄 수 있고, 함수뿐만 아니라 데이터 선언까지 검사해 줍니다. 게다가 lint와 같이 시스템에 독립적인 프로그램을 사용하면 좀더 정확한 분석을 받을 수 있기 때문에, 컴파일러의 특별한 기능이나, 특정 시스템 기능에 의존하지 않는, 이식성이 높은 프로그램을 작성하는데 큰 도움이 됩니다.

`lint'를 쓰는 대신 function prototype을 쓰길 원한다면, 먼저 여러 파일들이 같은 prototype을 지녔는지 검사하고, 정확한 prototype을 썼는지 검사해야 합니다. 질문 [*]1.7과 [*]10.6을 참고하기 바랍니다.



Q 18.9
인터넷상에서 구할 수 있는 C 언어 안내서나 기타 자료는 없나요?

Answer
물론 많습니다:

덧붙여 질문 [*]18.10, [*]18.15c도 참고하시기 바랍니다.

Note
원 저자의 홈페이지의 다음 링크에서 관련된 자료를 찾아볼 수 있습니다:
  http://www.eskimo.com/~scs/C.html



Q 18.10
C 언어를 배우려고 하는데 좋은 책좀 추천해 주세요.

Answer
C 언어에 관한 책들은 이 글에서 모두 다루기에는 너무나도 많습니다; 따라서 이들 책 모두를 평가해본다는 것은 너무나도 힘이 듭니다. 많은 사람들이 가장 처음 만들어진 책이 가장 좋다고 말하며 The C Programming Language를 추천합니다. 이 책은 Kernighan씨와 Ritchie씨가 썼습니다 (``K&R''이라고도 하며, 현재 두번째 판이 나와 있습니다). 그러나 K&R이 초보자가 보기에는 적당하지 않다는 의견도 있습니다; 그렇지만 우리들 대부분이 그 책으로 C를 배웠으며, 아주 잘 배웠다고 생각합니다; 그러나 책의 내용이 너무나 딱딱하기 때문에 프로그래밍에 대한 배경 지식이 전혀 없는 사람에게는 무리일 것입니다. 이 책에 대한 여러 보충 설명이나 정정 목록은 아래에서 구할 수 있습니다:

comp.lang.c의 많은 사람들은 K.N. King씨가 쓴 C: A Modern approach를 추천합니다.

가장 좋은 참고 서적은 C: A Reference Manual이며, Samuel p. Harbison씨와 Guy. L. Steele씨가 썼습니다. 현재 네번째 판이 나와 있습니다.

C 언어를 처음부터 배우기에는 적당하지 않지만 이 FAQ 목록도 출판되어 책으로 나와 있습니다. 이 글의 마지막 ``저서 목록''의 [Summit]를 참고하시기 바랍니다.

Mitch Wright씨는 C와 UNIX에 관한 많은 참고서에 대한 목록을 가지고 있으며, ftp.rahul.netpub/mitch/YABL에서 구할 수 있습니다.

Scott McMahon씨는 여러가지 비평에 대한 글을 가지고 있습니다:

  http://www.skwc.com/essent/cyberreviews.html

`Association of C and C++ Users (ACCU)'는 C/C++에 대한 많은 책들에 대한 논평을 모아 놓았습니다:

  http://bach.cis.temple.edu/accu/bookcase
  http://www.accu.org/accu

이 FAQ 목록의 편집자도 권장하는 많은 책에 대한 정보를 가지고 있습니다; 필요하면 보내드리고 있습니다. 덧붙여 질문 [*]18.9도 참고하시기 바랍니다.

Note
C: A Reference Manual은 현재 다섯번째 판이 나와 있습니다. 자세한 것은 다음 사이트를 참고하기 바랍니다:
  http://www.careferencemanual.com/



Q 18.13
표준 C 라이브러리에 대한 소스를 구할 수 있을까요?

Answer
(public domain은 아니지만) P.J. Pluager씨의 The Standard C Library가 있습니다. 모든 C 라이브러리에 대한 소스 코드는 NetBSD나 GNU (물론 Linux도) project의 일부분으로 제공됩니다. 덧붙여 질문 [*]18.15c, [*]18.16도 참고하시기 바랍니다.

Note
GNU C 라이브러리의 홈페이지는 아래와 같습니다:
  http://www.gnu.org/software/glibc/



Q 18.13b
온라인 C reference manual이 있을까요?
Answer
두 개가 있습니다:



Q 18.13c
ANSI/[C89] C 표준을 구할 수 있을까요?
Answer
질문 [*]11.2를 보기 바랍니다.



Q 18.14
수식(expression)을 파싱(parsing)하고 평가하는 코드가 필요합니다.
Answer

두 개의 패키지가 각각 1993년 12월에 comp.sources.misc에 1994년 1월에 alt.sources에 게시되었지만, 지금은 없고, 대신 sunsite.unc.edu의 다음 위치에서 얻을 수 있습니다:

  pub/packages/development/libraries/defunc-1.3.tar.Z
또, lamont.ldgo.columbia.edu에서 ``parse'' 패키지도 찾아보기 바랍니다. 여러가지 옵션들이 포함되어 있는 S-Lang 인터프리터는 anonymous ftp로 amy.tch.harvard.edu/pub/slang에서 구할 수 있습니다. 또한 Cmm (``C-minus-minus'')이라는 쉐어웨어도 있습니다. 덧붙여 질문 [*]18.16, [*]20.6도 참고하시기 바랍니다.

Software Solutions in C의 Chapter 12, 페이지 235-55에서 파싱/평가하는 코드를 찾아볼 수 있습니다.



Q 18.15
C 언어에 대한 BNF 또는 YACC 문법을 구할 수 있을까요?
Answer
완벽한 문법은 물론 ANSI 표준에 들어 있습니다; 질문 [*]11.2를 보기 바랍니다. 다른 문법으로는 (C++과 관련된) Jim Roskind씨가 만든 것인데 ics.uci.edupub/c++grammar1.1.tar.Z로 얻을 수 있습니다. 아마도 ftp.ics.uci.edu, OLD/pub/c++grammar1.1.tar.Z일지도 모릅니다. 또는 ftp.eskimo.comu/s/scs/roskind_grammar.Z로 구할 수 있습니다. 작업중인 ANSI 문법은 (Jeff Lee씨가 작업하는) ftp.uu.net의 (질문 [*]18.16 참고) usenet/net.sources/ansi.c.grammer.Z에서 구할 수 있으며, lexer가 포함되어 있습니다. [K&R2]의 부록이나 FSF의 GNU C compiler에서도 문법을 얻을 수 있습니다.

comp.compilers 아카이브는 문법에 대한 많은 정보를 가지고 있습니다; 질문 [*]18.3을 보기 바랍니다.

References
[K&R1] § A18 pp. 214-219
[K&R2] § A13 pp. 234-239
[C89] § B.2
[H&S] pp. 423-435 Appendix B



Q 18.15b
C 컴파일러를 테스트해 볼 수 있는 tool들은 없을까요?

Answer
A: Plum Hall (formerly in Cardiff, NJ; now in Hawaii) sells one; other packages are Ronald Guilmette's RoadTest(tm) Compiler Test Suites (ftp to netcom.com, pub/rfg/roadtest/announce.txt for information) and Nullstone's Automated Compiler Performance Analysis Tool.
  http://www.nullstone.com/
The FSF's GNU C (gcc) distribution includes a c-torture-test which checks a number of common problems with compilers. Kahan's paranoia test, found in netlib/paranoia on netlib.att.com, strenuously tests a C implementation's floating point capabilities.



Q 18.15c
쓸모 있는 코드나 예제를 모아놓은 것은 없을까요?
Answer
Bob Stout씨의 ``SNIPPETS''는 매우 인기있으며, ftp.brokersys.compub/snippetshttp://www.brokersys.com/snippets/에 있습니다.

Lars Wirzenius씨의 `public' 라이브러리는 ftp.funet.fi의 다음 위치에 있습니다:

  pub/language/C/Publib/
덧붙여 질문 [*]14.12, [*]18.9, [*]18.13, [*]18.16도 참고하시기 바랍니다.

Note
SNIPPETS의 홈페이지는 아래로 변경되었습니다:
  http://www.snippets.org/



Q 18.15d
``multiple precison arithmetic''을 위한 코드가 필요합니다.
Answer
BSD Unix libc 소스에 있는 ``quad'' 함수들은 매우 인기있는 패키지입니다. (ftp.uu.net의 다음 위치에 있습니다:
  /systems/unix/bsd-sources/ .... /src/lib/libc/quad/*
GNU MP 라이브러리, 또 MIRACL 패키지 (http://indigo.ie/ mscott/ 참고), 그리고 오래된 Unix에서 제공되는 libmp.a를 참고 바랍니다. 덧붙여 질문 [*]14.12, [*]18.16도 참고하시기 바랍니다.

References
[Dale] § 17 pp. 343-454



Q 18.16
이러한 공개용 프로그램들을 어떻게 얻을 수 있나요?
Answer
프로그램 숫자도 갈수록 증가하고, 이런 프로그램들을 정리해 놓은 보관(archive) 사이트들도 갈수록 증가하고 있고, 이러한 프로그램들을 쓰려는 사람들도 덩달아 많아지고 있기 때문에 이 질문은 매우 대답하기 쉬우면서도 어렵습니다.

널리 알려진, 공개를 취지로 한 archive 사이트들을 예로 들면, ftp.uu.net, archive.wustl.edu, oak.oakland.edu, sumex-aim.stanford.edu, 그리고 wuachive.wustl.edu가 있습니다. 이 사이트들은 모두 많은 소프트웨어를 가지고 있으며, 많은 정보들이 공개되어 있습니다. FSF의 GNU 프로젝트의 주 사이트는 prep.ai.mit.edu입니다. 이 사이트는 정말로 바쁘기 때문에 접속이 거부당할 수도 있지만, 그만큼 많은 미러 사이트가 있으므로 참고하기 바랍니다.

인터넷을 통하여 이런 사이트에서 파일을 받을 수 있는 가장 일반적인 방법은 anonymous ftp를 쓰는 것입니다. ftp를 쓸 수 없다면, mail로 ftp를 쓸 수 있게 해주는 ftp-by-mail 서버가 많이 있으므로 이것을 쓰면 됩니다. 게다가 world-wide web (WWW)는 많은 데이터 파일들을 전송하고 인덱싱하고 알리는 데 쓰이고 있으며, 데이터를 얻는 가장 새로운 방법입니다.

그리고 이 질문에 대한 답은 쉬운 편도 있지만, 어려운 것은 세부적인 내용에 대한 것입니다. 즉 쓸 수 있는 archive 사이트들을 모두 알려주거나 이 사이트에서 데이터를 받아보는 방법을 알려 주는 것은 불가능합니다. 인터넷에 접속할 수 있다면 여러분은 이 글보다 훨씬 새롭고 알찬 사이트 및 접근 방법을 이미 알고 있을 것입니다.

또 여러분이 찾고자 하는 것이 어디에 있는 지 알려주기도 쉬운 일이 아닙니다. 이미 이러한 일을 처리할 수 있는 새로운 인덱싱 서비스가 널려 있습니다. Alta Vista나 Excite, Yahoo가 그 예입니다.

유즈넷을 쓸 수 있다면 comp.sources.unixcomp.sources.misc 뉴스 그룹에 정기적으로 게시되는, 보관 정책과 아카이브에 접속하는 방법을 읽어보시기 바랍니다. 이 그룹의 글을 볼 수 있는 두 개의 사이트를 소개하면:

뉴스 그룹 comp.archives은 여러가지 주제에 대한 많은 글을 게시하고 있습니다. 마지막으로 뉴스 그룹 comp.sources.wanted에서는 소스를 찾고자 할 때 질문을 게시할 수 있는 더 적당한 곳입니다. 그러나 먼저 이 뉴스 그룹의 FAQ 목록을 읽고 어떻게 소스를 찾을 수 있는지 알고 나서 글을 게시하기 바랍니다.

덧붙여 질문 [*]14.12, [*]18.13, [*]18.15c도 참고하시기 바랍니다.

Note
FSF의 GNU 프로젝트의 공식 홈페이지는 다음과 같습니다:
  http://www.gnu.org/

Seong-Kook Shin
2015-09-18