Tiny C Compiler
更新项目
支持C99 VLA规范
可产生make的dependencies(-MD/-MF)
支持多种平台的程序编写,例:x86-64、ARM、OSX、WinCE、kFreeBSD、Hurd
修正一些已知的bug
特色功能
TCC与其他C语言编译器的不同处在于:
容量小,软件大小约为1MB左右,可存储于1.44MB的磁盘片中使用。
速度快,以TCC开发的程序可运行于x86(16/32位)与 x86-64(64位)环境中,据开发者说,运行比GCC较来得相当快速。程序亦可以包含汇编语言(inline assembler)于其中运行与编译。
无限制,其他C语言的动态Library祗要匹配ISO C99规范,皆可以给予TCC来使用与编译。
安全性,TCC包含一个可选的memory(内存)和boundschecker(程序检测器),经过检测的代码可以随意地混合于标准代码内。
其他,TCC为命令行式的使用,目前并无集成性开发环境,但可以配合其他的编辑软件使用(如:UltraEdit...等)。
编译效率
建议参考开发者文件说明Compilation Speed。
使用信息
程序安装
Windows环境安装,设置与测试
将win32压缩文件0.9.26-win32位版本解压缩于任意目录下皆可以(其他版本0.9.26-win64位版本,0.9.26 Linux版本与源代码档),这里是示范于windows系统C磁盘下示例
设置系统环境参数,新增
增加路径
测试:打开命令提示字符(Command Prompt) 于任一目录下输入TCC -version,即显示如下
往后即可于任一目录下编译C语言代码
使用方式
可以相同于一般的命令行C语言软件的使用方式
编译方式
于Windows下编译
或是
提示:以"-run"方式来编译程序,编译结果祗会存放于记忆中而己,运行完毕后即释放,而不会产生对应的可执行文件(即EXE)。
于Linux/Unix Like下编译
或是
同前述"-run"的提示。
指令查询
可于DOS/Windows命令提示字符下,或是于Linux/Unix Like下键入
C:\>TCC 或是[folder name]$ TCC
文件大小
网络上Demon"s Blog亦有测试信息,以Borland C Compilder 5.5(BCC, Commandline, Freeware),Visual C++ 6.0与Tiny C Compiler来比较编译后的文件大小。
测试编译代码为:
#includeintmain(intargc,char*argv[]){printf("Hello, world\n");return0;}
存成文件"hellow.c",接着编译程序
若没有其他信息,则是编译完成,接着运行程序
或是于编译(32位)时增加参数,有多的信息可以参考如下:
32位编译时信息如下:
64位编译时信息如下:
以有错误的代码测试如下:
#includeintmain(intargc,char*argv[]){printf("Hello, world\n);}
测试编译时,结果如下:
如使用内存内编译(32位)方式时,方法与结果如下:
另外使用内存内编译(64位)方式时,方法与结果如下:
编译结果为:
用Borland C Compiler 5.5编译结果为51.0 KB(52,224 bytes)
用Visual C++ 6.0编译结果为40.0 KB(40,960 bytes)
用TCC 0.9.26编译结果为1.50 KB(1,536 bytes)
使用汇编语言
TinyCC即集成了Assembly于其中,使用TinyCC assembler的语法兼容于GNUassembler即可,但是使用时仍是有限制条件如下:
必须是C或C++的指令有支持
由于指针符号相同于C,所以无法使用符号有"."或"$"
支持32位为主
必须为inline assembler内嵌汇编语言使用
相关支持的汇编语言语法如下列所示:
注意事项
为方便编译,要将TCC源代码内的libtcc.h于置于include内。
开发历史
TCC是由Obfuscated Tiny C Compiler(OTCC)即小型混淆器用途发展而来,程序由Bellard于2001年编写来为参加国际C语言混乱代码大赛(IOCCC)比赛。其后,Bellard即延伸发展其小型混淆器的程序,而成为最终的TCC。
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
- 有价值
- 一般般
- 没价值
24小时热门
推荐阅读
关于我们
APP下载

{{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}