2.7 典型 TinyC 程序
好了,以上就是 TinyC 的全部了,够简单吧。典型的 TinyC 程序如下:
- #include "for_gcc_build.hh" // only for gcc, TinyC will ignore it.
- int main() {
- int i;
- i = 0;
- while (i < 10) {
- i = i + 1;
- if (i == 3 || i == 5) {
- continue;
- }
- if (i == 8) {
- break;
- }
- print("%d! = %d", i, factor(i));
- }
- return 0;
- }
- int factor(int n) {
- if (n < 2) {
- return 1;
- }
- return n * factor(n - 1);
- }
以上代码中的第一行的 #include “for_gcc_build.hh” 是为了利用gcc来编译该文件的,TinyC 编译器会注释掉该行。for_gcc_build.hh 文件源码如下:
- #include <stdio.h>
- #include <string.h>
- #include <stdarg.h>
- void print(char *format, ...) {
- va_list args;
- va_start(args, format);
- vprintf(format, args);
- va_end(args);
- puts("");
- }
- int readint(char *prompt) {
- int i;
- printf(prompt);
- scanf("%d", &i);
- return i;
- }
- #define auto
- #define short
- #define long
- #define float
- #define double
- #define char
- #define struct
- #define union
- #define enum
- #define typedef
- #define const
- #define unsigned
- #define signed
- #define extern
- #define register
- #define static
- #define volatile
- #define switch
- #define case
- #define for
- #define do
- #define goto
- #define default
- #define sizeof
此文件中提供了 print 和 readint 函数,另外,将所有 C 语言支持、但 TinyC 不支持的关键词全部 define 成空名称,这样来保证 gcc 和 TinyC 编译器的效果差不多。利用 gcc 编译的目的是为了测试和对比 TinyC 编译器的编译结果。
让我们先用 gcc 编译并运行一下上面这个典型的 TinyC 源文件吧。将以上代码分别存为 tinyc.c 和 for_gcc_build.hh,放在同一目录下,打开终端并 cd 到该目录,输入:
- $ gcc -o tinyc tinyc.c
- $ ./tinyc
将输出:
- 1! = 1
- 2! = 2
- 4! = 24
- 6! = 720
- 7! = 5040
如果您的系统中没有 gcc ,则应先安装 gcc 。如果你使用的是 debian ,可以用 apt-get 命令来安装,如下:
- $ sudo apt-get install build-essential
第 2 章完