Tiny C Compiler

此條目使用外部链接的方式可能不符合维基百科的方针或指引，或致使內文成為链接農場。 (2014年9月27日)
請協助清理過度與不適當的外部連結，并将有用的链接移到参考文献中。详情请参见条目的讨论页。

|

Tiny C Compiler開發者| Fabrice Bellard

|

当前版本| 0.9.27（2017年12月17日，​7年前​（2017-12-17））
源代码库|

* repo.or.cz/tinycc.git

编程语言| C語言及組合語言
操作系统| Linux、Unix、Windows
类型| C语言編譯器
许可协议| GNU宽通用公共许可证
网站| http://bellard.org/tcc/

Tiny C Compiler（縮寫為TCC、tCc或TinyCC）是一个用於x86或x86-64系統的C编译器，開發者為Fabrice Bellard。軟體是設計用於低階電腦環境，或是於磁碟容量有限的空間中（1.44磁片或是硬碟）。軟體可以適用於Windows、Linux、Unix作業系統，而最新版本為0.9.27（2017年12月17日）。TCC是在GNU宽通用公共许可证（LGPL）協定規範下發布。

TCC符合ANSI C（C89/C90）規範[1]，亦符合新版的ISO C99標準規範和GNU C擴展的內嵌組合語言（即inline assembler）功能汇编语言。

## 實現狀態

[编辑]

* 支援C99 VLA規範
* 完全支援C89，基本符合C99規範
* 可產生make dependencies（-MD/-MF）
* 支援多種平台的目標代碼生成，如：x86-64、ARM、OSX、WinCE、kFreeBSD、Hurd

## 特色功能

[编辑]

TCC與其他C語言編譯器的不同處在於：

* 容量小，軟體大小約為1MB左右，可儲存於1.44MB的磁碟片中使用。
* 速度快，以TCC開發的程式可執行於x86（16/32位元）與 x86-64（64位元）環境中，據開發者說，執行比GCC較來得相當快速。[2]程式亦可以包含組合語言（inline assembler）於其中執行與編譯。
* 無限制，其他C語言的動態Library祗要符合ISO C99規範，皆可以給予TCC來使用與編譯。
* 安全性，TCC包含一個可選的記憶體边界检查，經過檢測的程式碼可以隨意地混合於標準程式碼內。
* 其他，TCC為命令列式的使用，目前並無整合性開發環境，但可以配合其他的編輯軟體使用（如：UltraEdit ...等）。

## 用途

[编辑]

著名的 TCC 应用包括：

* TCCBOOT[3]，一个可以在大约 10 秒内从源码启动 Linux内核的啟動程式。该啟動程式可以从硬盘中读取 Linux 源代码，将可执行指令写入内存并执行。
* TCC 曾被用于演示对軟體後門的防御。 [4]
* TCC 曾被用于编译 GCC，虽然需要不少补丁才能完成这个操作。
* Cinpy[5]，一个允许在Python模块中添加C函数的库。这些 C 函数在运行时使用 TCC 编译，然后通过 ctypes 库在 Python 代码中调用。
* 被安装在 JSLinux[6] ，一个能在浏览器中运行 Linux 和其它操作系统的虚拟机（也是由 Bellard 开发的）。
* 被用于编译超微型国际象棋引擎。[7]
* TCC 曾被內建於 Google Android 系統，於 Android 2.0 版本中。[8]

## 開發歷史

[编辑]

TCC 项目起源于 OTCC （Obfuscated TCC，即代码混淆过的 TCC），这是 Bellard 为赢得 2001 年国际C语言混乱代码大赛（IOCCC）编写的一个程序。其後，Bellard 反混淆并延伸發展了该程序，于是有了 TCC。[9]

在 2012 年 2 月 4 日之前的某个时间， Bellard 在 TCC 的官方网站上宣布他不再参与 TCC 的维护工作。[10]

自从 Bellard 离开 TCC 项目以来，已经有不少组织和个人分发补丁或创建维护分支，为 TCC 提供构建支持以及问题修复。

## 參考文献

[编辑]

### 引用

[编辑]

1. ^ Tiny C Compiler Reference Documentation （页面存档备份，存于互联网档案馆） accessed on 2008-08-07]
2. ^ Tiny C Compiler官方網站上关于编译速度的对比.  [2019-03-01]. （原始内容存档于2019-02-19）.
3. ^ TCCBOOT.  [2019-03-01]. （原始内容存档于2011-05-18）.
4. ^ Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling （页面存档备份，存于互联网档案馆）. ACSAC.
5. ^ Cinpy.  [2019-03-01]. （原始内容存档于2008-11-20）.
6. ^ JavaScript Linux.  [2019-03-01]. （原始内容存档于2011-07-09）.
7. ^ Super Micro-Max Chess Engine.  [2019-03-01]. （原始内容存档于2019-03-02）.
8. ^ libacc : Android 2.0內建的輕量級C Compiler.  [2012-05-06]. （原始内容存档于2010-10-23）.
9. ^ Bellard, Fabrice. Obfuscated Tiny C Compiler （页面存档备份，存于互联网档案馆）
10. ^ archive.org 上最古老的 TCC 官方网站快照，宣布 Bellard 停止维护 TCC 项目。.  [2012-02-04]. （原始内容存档于2011-04-08）.

### 来源

[编辑]

* Tiny C Compiler Reference Documentation（页面存档备份，存于互联网档案馆） accessed on 2008-08-07
* Glöckner, Daniel. Re: Tinycc-devel (no subject)（页面存档备份，存于互联网档案馆）, September 8, 2006.
* a b grischka, GCC by TCC (some fixes)（页面存档备份，存于互联网档案馆）, 29 Sep 2005
* Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling. ACSAC（页面存档备份，存于互联网档案馆）.
* Bellard, Fabrice. Obfuscated Tiny C Compiler（页面存档备份，存于互联网档案馆）
* Bellard Fabrice Project Homepage（页面存档备份，存于互联网档案馆）

## 外部連結

[编辑]

* Tiny C Compiler官方網站（页面存档备份，存于互联网档案馆）
* Tiny C Compiler develop archive（页面存档备份，存于互联网档案馆）
* Tiny C Compiler GIT（页面存档备份，存于互联网档案馆）

## 参见

[编辑]

* 自由软件主题

維基教科書中的相關電子教程：TCC使用指南

* Portable C Compiler（PCC）
* Small-C（英语：Small-C）
* 內聯彙編（inline assembler）

* 查
* 论
* 编

C语言

* 《C程序设计语言》（K&R C）
* 历史
* ANSI C
* C99
* C11
* C18
* C23
* 嵌入式C语言
* MISRA C

特性|

* Functions
* 头文件
* 字符串
* 语法
* 预处理器
* 数据类型
* 指针

函式庫|

* glibc
* C標準函式庫
* C POSIX library
* Dietlibc
* uClibc
* Newlib
* EGLIBC
* Bionic
* klibc
* musl

編譯器|

* Clang
* GCC
* MSVC
* Intel C++
* Borland Turbo C
* LCC
* Pelles C
* PCC
* TCC
* C++/CLI
* C++/CX
* Watcom C/C++ 编译器

C與其他的程式語言|

* C与C++
* 兼容性
* 運算子
* Pascal与C的比较（英语：Comparison of Pascal and C）
* C to Java byte-code compiler

派生的程式語言|

* C++
* C#
* Objective-C
* D語言
* Alef（英语：Alef (programming language)）
* Limbo
* Go
* Vala

* C/C++的整合開發環境
* 分类

*[查]: 查看该模板
*[论]: 讨论该模板
*[编]: 编辑该模板