-
xzsdn_08



- 注册时间 01-04-2009
- 江苏徐州
- 发帖总数 641
|
注意: 本章中的信息比较旧, 有些可能已经过时了, 特别是各个公共包的 URL。
- 19.1 常用工具列表。
- 19.2 怎样抓捕棘手的 malloc 问题?
- 19.3 有什么免费或便宜的编译器可以使用?
- 19.4 刚刚输入完一个程序, 但它表现的很奇怪。你可以发现有什么错误的地方吗?
- 19.5 哪里可以找到兼容 ANSI 的 lint?
- 19.6 难道 ANSI 函数原型说明没有使 lint 过时吗?
- 19.7 网上有哪些 C 的教程或其它资源?
- 19.8 哪里可以找到好的源代码实例, 以供研究和学习?
- 19.9 有什么好的学习 C 的书?有哪些高级的书和参考?
- 19.10 哪里可以找到标准 C 函数库的源代码?
- 19.11 是否有一个在线的 C 参考指南?
- 19.12 哪里可以得到 ANSI/ISO C 标准?
- 19.13 我需要分析和评估表达式的代码。
- 19.14 哪里可以找到 C 的 BNF 或 YACC 语法?
- 19.15 谁有 C 编译器的测试套件?
- 19.16 哪里有一些有用的源代码片段和例子的收集?
- 19.17 我需要执行多精度算术的代码。
- 19.18 在哪里和怎样取得这些可自由发布的程序?
19.1 常用工具列表。
| 工具 |
程序名 (参见问题 18.18) |
| C 交叉引用生成器 |
cflow, cxref, calls, cscope, xscope, ixfw |
| C 源代码美化器/美化打印 |
cb, indent, GNU indent, vgrind |
| 版本控制和管理工具 |
CVS, RCS, SCCS |
| C 源代码扰乱器 (遮蔽器) |
obfus, shroud, opqcp |
| ``make" 从属关系生成器 |
makedepend, cc -M 或 cpp -M |
| 计算源代码度规工具 |
ccount, Metre, lcount, csize; McCable and Associates 也有一个商业包出售 |
| C 源代码行数计数器 |
可以用 UNIX 的标准工具 wc 作个大概的计算, 比用 grep -c ";" 要好 |
| C 说明帮助 (cdecl) |
见 comp.sources.unix 第14卷 (参见问题 18.18) 和 [K&R2] |
| 原型发生器 |
参见问题 11.30 |
| malloc 问题抓捕工具 |
参见问题 18.2 |
| ``选择性" 的 C 预处理器 |
参见问题 10.16 |
| 语言翻译工具 |
参见问题 11.30 和 20.23 |
| C 校对机 (lint) |
参见问题 18.5 |
| C 编译器 |
参见问题 18.3 |
这个工具列表并不完全, 如果你知道有没列出的工具, 欢迎联系本表的维护者。
其它工具列表和关于它们的讨论可以在 Usenet 的新闻组 comp.compilers 和 comp.software-eng 找到。
参见问题 18.3 和 18.18。
19.2 怎样抓捕棘手的 malloc 问题? 有好几个调试工具包可以用来抓捕 malloc 问题。其中一个流行的工具是 Conor P. Cahill 的 dbmalloc, 公布在 comp.sources.misc 1992 年第 32 卷。还有 leak 公布在 comp.sources.unix 档案第 27 卷; ``Snippets" 合集中的 JMalloc.c, JMalloc.h; MEMDEBUG (ftp://ftp.crpht.lu/pub/sources/memdebug); Electric Fence。参见问题 18.18。
还有一些商业调试工具, 对调试 malloc 等棘手问题相当有用:
19.3 有什么免费或便宜的编译器可以使用? 自由软件基金的 GNU C (gcc, http://gcc.gnu.org/) 是个流行而高质量的免费 C 编译器. djgpp (http://www.delorie.com/djgpp/) 是移植到 MS-DOS 的 GCC 版本。据我所知, 有移植到 Macs 和 Windwos 上的 GCC 版本。 19.1
lcc 是另外一个流行的编译器 http://www.cs.virginia.edu/~lcc-win32/, http://www.cs.princeton.edu/software/lcc/)。
Power C 是 Mix Sotfware 公司提供的一个非常便宜的 MS-DOS 下的编译器。公司地址:1132 Commerce Drive, Richardson, TX 75801, USA, 214-783-6001。
ftp://ftp.hitech.com.au/hitech/pacific 是个 MS-DOS 下的试用 C 编译器。非商业用途的不一定要注册。
新闻组 comp.compilers 的档案中有许多有关各种语言的编译器、解释器、 语法规则的信息。 新闻组在 http://compilers.iecc.com/ 的档案包含了一个 FAQ 列表和免费编译器的目录。
参见问题 18.18。
脚注
... 的 GCC 版本。19.1 译者注: Windows 下有两个移植版本 cygwin (http://www.cygwin.com/) 和 MinGW (http://http://www.mingw.org/)。
19.4 刚刚输入完一个程序, 但它表现的很奇怪。你可以发现有什么错误的地方吗? 看看你是否能先用 lint 跑一遍 (用 -a, -c, -h, -p 或别的参数)。许多 C 编译器实际上只是半个编译器, 它们选择不去诊断许多源程序中不会妨碍代码生成的难点。
参见问题 16.5、16.7 和 18.5。
参考资料: [LINT]。
19.5 哪里可以找到兼容 ANSI 的 lint? PC-Lint 和 FlexeLint 是 Gimpel Software 公司的产品 (http://www.gimpel.com/)。
Unix System V 版本 4 的 lint 兼容 ANSI。可以从 UNIX Support Labs 或 System V 的销售商单独得到 (和其它 C 工具捆绑在一起)。
另外一个兼容 ANSI 的 lint 是 Splint (以前叫 lclint, http://www.splint.org/)。它可以作一些高级别的正式检验。
如果没有 lint, 许多现代的编译器可以作出几乎和 lint 一样多的诊断。许多网友推荐 gcc -Wall -pedantic。
19.6 难道 ANSI 函数原型说明没有使 lint 过时吗? 实际上不是。首先, 原型说明只有在它们存在和正确的情况下才工作。一个无心的错误原型说明比没有更糟。其次, lint 会检查多个源程序文档的一致性, 以及数据和函数的说明。最后, 像 lint 这样独立的程序在加强兼容的、可移植的代码惯例上会比任何特定的、特殊实现的、充满特性和扩展功能的编译器更加谨慎。
如果你确实要用函数原型说明而不是 lint 来作多文件一致性检查, 务必保证原型说明在头文件中的正确性。参见问题 1.3 和 10.4。
19.7 网上有哪些 C 的教程或其它资源? 有许多个:
在 http://cprog.tomsweb.net 有个 Tom Torfs 的不错的教程。
Christopher Sawtell 写的《给 C 程序员的便筏》 (Notes for C programmers)。在下面的地址可以得到: ftp://svr-ftp.eng.cam.ac.uk/misc/sawtell_C.shar, ftp://garbo.uwasa.fi/pc/c-lang/c-lesson.zip, http://www.fi.uib.no/Fysisk/Teori/KURS/OTHER/newzealand.html。
Time Love 的《程序员的 C》 (C for Programmers)。 http://www-h.eng.cam.ac.uk/help/tpl/languages/C/teaching_C/
The Coronado Enterprises C 教程在 Simtel 镜像点目录 pub/msdos/c, 或在 http://www.coronadoenterprises.com/tutorials/c/index.html。
Steve Holmes 的在线教程 http://www.strath.ac.uk/IT/Docs/Ccourse/。
Martin Brown 的网页有一些 C 教程的资料 http://www-isis.ecs.soton.ac.uk/computing/c/Welcome.html。
在一些 UNIX 的机器上, 在 shell 命令行, 可以试试 ``learn c"。注意教程可能比较旧了。
最后, 本 FAQ 的作者以前教授一些 C 的课程, 这些笔记都放在了网上 http://www.eskimo.com/~scs/cclass/cclass.html。
【不承诺申明: 我没有检阅这些我收集的教程, 它们可能含有错误。除了那个有我名字的教程, 我不能为它们提供保证。而这些信息会很快的变得过时, 也许, 当你读到这想用上面的地址时, 它们已经不能用了】
这其中的几个教程, 再加上许多其它 C 的信息, 可以从 http://www.lysator.liu.se/c/index.html 得到。
Vinit Carpenter 维护着一个学习 C 和 C++ 的资源列表, 公布在新闻组 comp.lang.c 和 comp.lang.c++, 也归档在本 FAQ 所在 (参见问题 20.36), 或者 http://www.cyberdiem.com/vin/learn.html。
参见问题 18.8、18.9 和 18.16。
19.8 哪里可以找到好的源代码实例, 以供研究和学习?
这里有几个连接可以参考: ftp://garbo.uwasa.fi/pc/c-lang/00index.txt, http://www.eskimo.com/~scs/src/。
小心, 网上也有数之不尽的非常糟糕的代码。不要从坏代码中``学习", 这是每个人都可以做到的, 你可以做的更好。 参见问题 18.7, 18.10, 18.16 和 18.18。
19.9 有什么好的学习 C 的书?有哪些高级的书和参考? 有无数有关 C 的书, 我们无法一一列出, 也无法评估所有的书。许多人相信最好的书, 也是第一本:由 Kernighan 和 Richie 编写的《The C programming Language》(``K&R", 现在是第二版了 [K&R2])。对这本书是否适合初学者有不同的意见; 我们当中许多人是从这本书学的 C, 而且学的不错; 然而, 有些人觉得这本书太客观了点, 不大适合那些没有太多程序设计经验的人作为第一个教程。网上有一些评注和勘误表, 例如: http://www.csd.uwo.ca/~jamie/.Refs/.Footnotes/C-annotes.html, http://www.eskimo.com/~scs/cclass/cclass.html, http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html。
许多活跃在新闻组 comp.lang.c 的人推荐 K.N. King 写的《C: A Modern Approach》。
一本极好的参考书是由 Samuel P. Harbison 和 Guy L. Steele 和写的《C: A Reference Manual》[H&S]。
虽然并不适合从头开始学 C, 本 FAQ (英文版)已经出版了, 见文献 [CFAQ]。
C 和 C++ 用户协会 (Association of C and C++, ACCU) 维护着一份很全面的有关 C/C++ 的书目评论 (http://www.accu.org/bookreviews/public/)。
参见问题 18.7。
19.10 哪里可以找到标准 C 函数库的源代码? GNU 工程有一个完全实现的 C 函数库 (http://www.gnu.org/software/libc/)。另一个来源是由 P.J. Plauger 写的书《The Standard C Library》[Plauger], 然而它不是公共版权的。参见问题 18.8, 18.16 和 18.18。
19.11 是否有一个在线的 C 参考指南? 提供两个选择: http://www.cs.man.ac.uk/standard_c/_index.html, http://www.dinkumware.com/htm_cl/index.html
19.12 哪里可以得到 ANSI/ISO C 标准? 参见问题 11.2。
19.13 我需要分析和评估表达式的代码。
有两个软件包可用: ``defunc", 在 1993 年 12 月 公布于新闻组 comp.sources.misc (V41 i32,33), 1994 年 1 月公布于新闻组 alt.sources。可以在这个 URL 得到: ftp://sunsite.unc.edu/pub/packages/development/libraries/defunc-1.3.tar.Z; ``parse", 可以从 lamont.ldgo.columbia.edu 得到。其它选择包括 S-Lang 注释器 (http://www.s-lang.org/), 共享软件 Cmm (``C 减减" 或 ``去掉困难部分的C")。参见问题 18.18 和 20.4。
《Software Solutions in C》[Schumacher, ed.]中也有一些分析和评估的代码 (第 12 章, 235 到 255 页)。
19.14 哪里可以找到 C 的 BNF 或 YACC 语法? ANSI 标准中的语法是最权威的。由 Jim Roskind 写的一个语法在 ftp://ftp.eskimo.com/u/s/scs/roskind_grammar.Z。一个 Jeff Lee 做的, 新鲜出炉的 ANSI C90 语法工作实例可以在 ftp://ftp.uu.net/usenet/net.sources/ansi.c.grammar.Z 得到, 还包含了一个相配的 lexer。 FSF 的 GNU C 编译器也含有一个语法, 当然还有 K&R 的附录也有一个。
新闻组 comp.compilers 的档案中含有更多的有关语法的信息, 参见问题 18.3。
参考资料: [K&R1, Sec. A18 pp. 214-219]; [K&R2, Sec. A13 pp. 234-239]; [ISO, Sec. B.2]; [H&S, pp. 423-435 Appendix B]。
19.15 谁有 C 编译器的测试套件? Plum Hall (以前在 Cardiff, NJ, 现在在 Hawaii) 有一个套件出售; Ronald Guilmette 的 RoadTestTM 编译器测试套件 (更多信息在 ftp://netcom.com/pub/rfg/roadtest/announce.txt); Nullstone 的自动编译器性能分析工具 (http://www.nullstone.com)。 FSF 的 GNU C (gcc) 发布中含有一个许多编译器通常问题的 C 严酷测试。 Kahan 的偏执狂的测试 (ftp://netlib.att.com/netlib/paranoia), 尽其所能的测试 C 实现的浮点能力。
19.16 哪里有一些有用的源代码片段和例子的收集? Bob Stout 的 ``SNIPPETS" 是个很流行的收集 (ftp://ftp.brokersys.com/pub/snippets 或 http://www.brokersys.com/snippets/)。
Lars Wirzenius 的 ``publib" 函数库 (ftp://ftp.funet.fi/pub/languages/C/Publib/)。
参考问题 14.11, 18.7, 18.8, 18.10 和 18.18。
19.17 我需要执行多精度算术的代码。 一些流行的软件包是: ``quad", 函数在 BSD Unix 系统的 libc 中 (ftp.uu.net, /systems/unix/bsd-sources/.../src/lib/libc/quad/*); GNU MP 函数库 ``libmp"; MIRACL 软件包 (http://indigo.ie/~mscott/); David Bell 和 Landon Curt Noll 写的```calc" 程序; 以及老 Unix 的 libmp.a。参见问题 14.11 和 18.18。
参考资料: [Schumacher, ed., Sec.17 pp. 343-454]。
19.18 在哪里和怎样取得这些可自由发布的程序? 随着可利用程序数目, 公共可访问的存档网站数目以及访问的人数的增加, 这个问题回答起来变得即容易又困难。
有几个比较大的公共存档网站, 例如: ftp.uu.net, archive.umich.edu, oak.oakland.edu, sumex-aim.stanford.edu 和 wuarchive.wustl.edu。它们免费提供极多的软件和信息。 FSF GNU 工程的中央发布地址是 ftp.gnu.org。这些知名的网站往往非常繁忙而难以访问, 但也有不少 ``镜像" 网站来分担负载。
在互联网上, 传统取得档案文件的方法是通过匿名 ftp。对于不能使用 ftp 的人, 有几个 ftp-by-mail 的服务器可供使用。越来越多的, 万维网 (WWW) 被使用在文件的宣告、索引和传输上。也许还会有新的访问方法。
这些是问题中比较容易回答的部分。困难的部分在于详情---本文不能追踪或列表所有的文档网站或各种访问的方法。如果你已经可以访问互联网了, 你可以取得比本文更加及时的活跃网站信息和访问方法。
问题的另一个即难也易的方面是找到哪个网站有你所要的。在这方面有极多的研究, 几乎每天都有可能有新的索引服务出台。其中最早的服务之一是 ``archie", 当然还有许多高曝光的商业网络索引和搜索服务, 例如 Alta Vista, Excite 和 Yahoo。
如果你可以访问 Usenet, 请查看定期发布在新闻组 comp.sources.unix 和 comp.sources.misc 的邮件, 其中有说明新闻组归档的政策和怎样访问档案。其中两个是: ftp://gatekeeper.dec.com/pub/usenet/comp.sources.unix/, ftp://ftp.uu.net/usenet/comp.sources.unix/。新闻组 comp.archives 包括了多数的有关各种东西的匿名 ftp 网站公告。最后, 通常新闻组 comp.sources.wanted 是个适合询问源代码的地方, 不过在发贴前, 请先查看它的 FAQ ``怎样查找资源 (How to find sources)"。
参见问题 14.11, 18.8, 18.10 和 18.16。
|
|