Tiny CC 发挥 C 语言的威力 之一:介绍
2004-12-19 02:40
211 查看
Tiny CC 发挥 C 语言的威力 之一:介绍 | ||
TCC 介绍 在下文中,我们说 Tiny C 编译器、Tiny CC、或者 TCC 都是指的这个 Fabrice Bellard 发明的 GNU/Linux 环境下最小的 ANSI C 语言编译器。TCC 的主页在文后的参考资料中列出。在 Debian GNU/Linux 系统中,可以方便的用 apt-get install tcc 来从网络上安装 TCC 编译器。TCC 的主页上提供有给 Red Hat 系统上使用的 RPM 软件包。在微软 Windows 环境下,可以使用 Cygwin 的模拟 UNIX 的开发环境来编译和使用 Tiny C 编译器。TCC 是自由软件,软件许可证是 GNU LGPL,注意不是 GPL。 TCC 最有趣的特性是可以用 UNIX 系统上常见的 #!/usr/bin/tcc 的方式来执行 ANSI C 语言写就的源程序,省略掉了在命令行上进行编译和链接的步骤,而可以直接运行 C 语言写就的源程序。这样就能做到像任何一种其它的脚本语言比如 Perl 或者是 Python 一样,显著的加快开发步调。可以像编写 Shell 脚本一样的使用 C 语言,随便想一想都觉得是一件奇妙的事情。但是 TCC 还有一些其它的特性呢! TCC 的体积非常小,全部源代码打包压缩以后不到 200 K 字节大小,编译后的 tcc 可执行程序不过 80 K 字节大小。这意味着我们几乎可以在任何场合使用 TCC 提供给我们的编写 C 语言脚本的能力。这其中当然包括硬盘空间十分紧张的环境,比如嵌入式系统和启动软盘等等。 在给 TCC 的源程序中可以使用任何在给 GCC 的源程序中可以使用的动态链接库。TCC 不仅支持标准的 ANSI C 语言,而且也支持 ISO C99 标准和一部分来自于 GCC 的对 C 语言所做的扩展。 TCC 直接生成经过部分优化的 X86 机器代码。并不需要生成任何虚拟机的二进制代码。据 TCC 作者提供的数据,TCC 的编译速度比 GNU C 编译器在不做任何代码优化工作(gcc -O0)的时候都要快。当然啦,要是让 GCC 做代码优化的话,那么编译速度就更加比不上 TCC 喽。 下面我们用几个例子来说明 TCC 带给我们的方便。 TCC 的问候 这里是一个简单的 C 语言的 Hello, world! 程序。我们利用这个经典的问候的机会来对 GCC 和 TCC 做一个简单的比较。
为了充分发挥 TCC 的书写 C 语言脚本程序的能力,我们还可以在 hello.c 这个源文件的第一行上按照 UNIX 编写脚本程序的传统加入:
TCC 呀 TCC 呀 TCC 在这一小节,让我们来玩一个小小的多重嵌套 TCC 的游戏。 首先说明一下 TCC 是怎样把命令行参数传递给应用程序的。在命令行 Shell 上输入 tcc -run program.c 就可以不带参数的运行 program.c 这个程序。如果我们需要从命令行上给 program.c 里面的 main(int argc, char **argv) 函数传递命令行参数的话,我们就需要在命令行上输入 tcc -run program.c arg1 arg2 这样的命令;这样 arg1 和 arg2 就被 tcc 传递给了 program.c 程序中的 main() 函数。了解了这一点之后,我们来开始我们的小小游戏。 首先是直接在命令行 Shell 上运行 tcc -v 以输出 tcc 的版本信息。并做一下系统运行时间的测试评估。这里的 tcc 命令是 Debian GNU/Linux 系统上安装在 /usr/bin 目录下面的 tcc 命令。关于 time 命令的细节,读者朋友们可以参考相应的 Manual Page 页面。
在 Shell 管道中使用 TCC TCC 提供给我们用 C 语言进行脚本编程的能力,但是要最大限度的发挥出脚本编程的潜力来,我们需要在命令行 Shell 的环境中,让 TCC 的脚本程序和其它的命令行 Shell 工具能够紧密的合作才好。在 UNIX 的命令行 Shell 环境中让若干个工具合作的方式就是通过我们熟知的 Shell 的管道机制。下面我们来看看 TCC 和 Shell 的管道机制如何配合。 TCC 和 Shell 管道的配合有两个方面:一是 TCC 编译器本身如何使用管道;二是用 TCC 编写的 C 语言脚本程序如何使用管道。 我们先来看 TCC 编译器本身如何使用 Shell 管道。在 GNU/Linux 系统上处理管道输入的常见的办法,是让命令行程序可以处理特殊的减号(-)作为命令行参数。本来需要从某一个文件读取输入数据的命令行程序,在接收到这个减号作为命令行参数以后,就改为从标准输入(stdin)读取数据。这样就可以和 Shell 的管道机制配合起来。但是在当前的 TCC 0.9.19 版本中还不能处理这个减号作为命令行参数。不过我们可以有一个替代的办法,就是利用 GNU/Linux 系统上的 /dev/stdin 设备文件。 下面的测试是在 Debian GNU/Linux 系统上做出的。在 Debian GNU/Linux 系统上 /dev/stdin 其实是一个指向 /dev/fd/0 的符号链接;而后者又是一个指向 /dev/pts/0 的符号链接。如果你的 GNU/Linux 系统上没有 /dev/stdin 的话,你还可以使用 /proc/self/fd/0 来代替。
上面讲了 TCC 编译器本身如何支持 Shell 管道,下面讲用 TCC 编写的 C 语言脚本程序如何支持 Shell 管道。 这个其实是很简单的,只要在你的 C 语言脚本程序中恰到好处地使用标准输入(stdin)和标准输出(stdout)就可以了。我们来看一个简单的例子。
小结 TCC 的小巧灵活的特性使得我们可以在诸如安装软盘、急救软盘、以及微型 GNU/Linux 系统上使用 C 语言进行脚本程序编程工作。在中小型的 C 语言项目中,在开发阶段使用 TCC 进行工作,可以免去编译和链接的步骤,加快测试的速度。这两点是 TCC 带给我们的主要的好处。 此外,我想读者朋友们也会同意用 C 语言进行脚本程序编程,这实在是一件非常有趣的事情。 感谢 感谢 Fabrice Bellard 给我们带来 TCC 这样一个美妙的工具。此外,作者还要感谢 Fabrice Bellard 和 Damian M Gryski 在 Tinycc-devel 邮件列表上提供给作者的帮助。 参考资料 Tiny CC 的主页 http://fabrice.bellard.free.fr/tcc/ Debian 的 tcc 软件包的主页 http://packages.debian.org/unstable/devel/tcc.html Cygwin 是一个微软 Windows 环境下的模拟 UNIX 的开发和使用环境,大部分主要的 GNU 工具包都有 Cygwin 下的版本。可以在 Cygwin 环境下使用 TCC。Cygwin 的主页在 http://www.cygwin.com |
相关文章推荐
- Tiny CC 发挥 C 语言的威力 之一: 介绍
- 发挥语言的威力--融合PHP与ASP
- 发挥语言的威力--融合PHP与ASP
- C#初1(语言介绍&工具熟悉)
- 网络仿真NS2之——TCL语言介绍与实践
- Java语言介绍(02)语言特点
- Java语言介绍(04)开源项目(03)作业调度(01)Quartz
- C 语言中的指针介绍
- 介绍一下static、final、abstract 在JAVA语言中的区别
- linux操作系统下c语言编程入门 -- (9)inux下C开发工具介绍
- Go语言几大命令简单介绍
- 安全性断言标记语言(SAML)介绍
- C 语言标准 I/O 函数介绍以及演示程序
- C#语言初级入门介绍
- 【8086汇编基础】01--汇编语言简要介绍
- go语言介绍--纯代码
- 网站开发-php开发手机论坛(3)-开发语言及开发工具介绍
- 了解了这些才能开始发挥jQuery的威力
- 易语言更改编辑框内文字字体的介绍