问题

Tiny C Compiler是个怎样的编译器?有人更新吗?

回答
Tiny C Compiler(TCC)是一个非常有趣且有特色的C语言编译器。它以小巧、快速和易于嵌入而闻名。 如果你想要一个对C语言的理解非常纯粹、不带任何复杂附加功能,并且能快速进行编译和执行的工具,那么TCC就非常合适。

TCC的显著特点可以从以下几个方面来细说:

小巧极致: TCC的目标是成为一个非常小的编译器。这意味着它占用的磁盘空间极少,对内存的需求也低。这使得它非常适合在资源受限的环境下使用,比如嵌入式系统,或者仅仅是为了快速验证一小段C代码。它甚至可以编译自己本身,并且最终的可执行文件也相当小。
速度惊人: TCC的编译速度可以说是它最大的卖点之一。它采用了非常直接的编译流程,避免了很多现代编译器中常见的优化步骤(比如复杂的代码分析、多阶段的优化)。对于许多简单的程序,TCC可以实现近乎实时的编译和运行。你可以把TCC想象成一个“即时翻译器”,它能飞快地将C代码转化为机器码并执行。
易于嵌入与扩展: TCC的设计理念之一就是易于集成到其他程序中。它提供了一个API,允许其他应用程序调用TCC来动态编译和执行C代码。这对于需要脚本化功能、动态代码生成或者在运行时添加用户自定义逻辑的应用程序来说非常有价值。你可以想象一个大型应用程序,它允许用户编写C语言的插件,然后通过TCC在运行时加载和执行。
遵循C标准(相对而言): 虽然TCC强调轻量和速度,但它仍然是一个遵循C语言标准的编译器。它支持ANSI C和部分C99标准。当然,由于其设计的初衷,它可能不像GCC或Clang那样支持所有的最新C标准特性,或者在某些边缘情况下的行为可能略有不同。但对于大多数常见的C编程来说,它是完全够用的。
命令行工具与库: TCC不仅可以作为一个独立的命令行编译器使用(就像GCC一样),它还提供了一个库,方便开发者将其集成到自己的项目中。这意味着你不仅可以像使用gcc一样编译`.c`文件,还可以编写程序来调用TCC的接口,实现更复杂的动态编译场景。
可作为脚本语言使用: TCC的快速编译和执行特性,使其可以被用作C语言的脚本解释器。你可以直接执行C代码文件,而无需一个显式的编译步骤(虽然背后实际上还是进行了编译)。这在某些场景下,比Python或Perl等传统的脚本语言更具优势,尤其是在需要直接与操作系统底层交互或者进行高性能计算时。

关于TCC的更新情况:

是的,TCC是有持续更新的,虽然它的更新频率可能不像GCC或Clang那样频繁,但开发者社区一直在维护和改进它。

社区活跃度: TCC有一个相对稳定和活跃的社区。开发者们会修复bug、添加对新C标准特性的支持、改进其性能和兼容性。
最新版本: 你可以去TCC的官方网站或者其代码仓库(通常在GitHub等平台)查看最新的版本信息和更新日志。更新通常会包含对新C特性的支持、性能的优化、兼容性方面的改进以及Bug修复。
更新内容: 近期的更新可能会涉及对C++特性(虽然TCC不是一个完整的C++编译器,但它也支持一些C++的子集)、更广泛的系统支持、以及更现代化的构建系统的支持。

总结一下,如果你需要一个:

非常小的C编译器: TCC是极佳的选择。
追求极致编译速度: TCC的表现会让你惊喜。
想在程序中动态执行C代码: TCC的API是为此而生的。
学习C语言,想快速验证代码片段: TCC可以让你立即看到结果。

它可能不是你进行大型项目开发的首选编译器(像GCC和Clang那样拥有丰富的优化选项和对复杂特性的全面支持),但对于上述场景,TCC绝对是一个独特而强大的工具。它提供了一种不同的编程体验,让你更贴近C语言的本质,也展示了编译器技术可以有多么轻巧高效。

网友意见

user avatar

Tiny C Compiler(TCC)原本是Fabrice Bellard大神用C语言实现的一个C语言编译器。它自身体积非常,编译/链接速度非常,生成的代码质量一般,可以自举(自己可以编译自己)。就如另外那个答案所说,这些特点在官网上都写得很清楚。

官方网站:

TCC : Tiny C Compiler

,官方文档:

Tiny C Compiler Reference Documentation

顺带:Fabrice Bellard大神的另一个好玩的项目,

Javascript PC Emulator

,里面的Linux镜像里就带有TCC。于是TCC在浏览器里也可以玩。

虽然Fabrice大神已经不维护TCC好多年,但还是有不少有爱的人在持续更新它的。

Git repo在此:

Public Git Hosting - tinycc.git/summary

<- 可以看到就今天都还有人在更新呢。

题主对小型C语言编译器感兴趣的话,请跳这个传送门:

有哪些关于c4 - C in four function 编译器的文章? - RednaxelaFX 的回答

我在那个回答里简单比较了C4与TCC、LCC等小型编译器的异同,也提到了一些资料链接(包括某本国内出的书)。欢迎参考。

简单介绍TCC的话,它跟上面说的C4类似,都是“单趟编译器”(one-pass compiler)——它的预处理(tccpp.c)、词法分析(tccpp.c)、语法分析(tccgen.c)、类型检查(tccgen.c)、代码生成(<arch>-gen.c)、汇编(其实直接生成了机器码,不经过汇编)、链接,全部都是在一趟里完成的。

由于是单趟编译器,TCC的编译流程中没有使用任何“中间表示”(intermediate representation,IR)。

TCC的预处理器、词法分析器与语法分析器都是手写的而不是生成的。

其中,语法分析器是典型的递归下降式(recursive descent),在语句层面与表达式层面都是。

整个编译流程基本上都是由语法分析所带动的。这种做法也叫做语法制导翻译(syntax-directed translation)。这是单趟编译器的典型做法。

代码生成使用的是基于栈的代码生成思路。这跟C4(特别是能生成x86机器码的C4x86)也是相似的。TCC在代码生成的过程中还做了很少量的优化,例如常量折叠。

顺带放个新传送门:

tcc -O2会做什么? - 编程语言与高级语言虚拟机杂谈(仮) - 知乎专栏

类似的话题

  • 回答
    Tiny C Compiler(TCC)是一个非常有趣且有特色的C语言编译器。它以小巧、快速和易于嵌入而闻名。 如果你想要一个对C语言的理解非常纯粹、不带任何复杂附加功能,并且能快速进行编译和执行的工具,那么TCC就非常合适。TCC的显著特点可以从以下几个方面来细说: 小巧极致: TCC的目标.............
  • 回答
    您好!关于厦门美莎公司的代理问题,我来帮您梳理一下,尽量详细地解答,并且 постараюсь让它听起来更像一个人在聊天,而不是冷冰冰的机器输出。首先,您问“MOSTLY TINY厦门美莎公司的代理能做吗?”这个问题其实有点模糊,可能您想了解的是: 代理“MOSTLY TINY”这个品牌,在厦门.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有