2.7 典型 TinyC 程序

好了,以上就是 TinyC 的全部了,够简单吧。典型的 TinyC 程序如下:

  1. #include "for_gcc_build.hh" // only for gcc, TinyC will ignore it.
  2.  
  3. int main() {
  4. int i;
  5. i = 0;
  6. while (i < 10) {
  7. i = i + 1;
  8. if (i == 3 || i == 5) {
  9. continue;
  10. }
  11. if (i == 8) {
  12. break;
  13. }
  14. print("%d! = %d", i, factor(i));
  15. }
  16. return 0;
  17. }
  18.  
  19. int factor(int n) {
  20. if (n < 2) {
  21. return 1;
  22. }
  23. return n * factor(n - 1);
  24. }

以上代码中的第一行的 #include “for_gcc_build.hh” 是为了利用gcc来编译该文件的,TinyC 编译器会注释掉该行。for_gcc_build.hh 文件源码如下:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdarg.h>
  4.  
  5. void print(char *format, ...) {
  6. va_list args;
  7. va_start(args, format);
  8. vprintf(format, args);
  9. va_end(args);
  10. puts("");
  11. }
  12.  
  13. int readint(char *prompt) {
  14. int i;
  15. printf(prompt);
  16. scanf("%d", &i);
  17. return i;
  18. }
  19.  
  20. #define auto
  21. #define short
  22. #define long
  23. #define float
  24. #define double
  25. #define char
  26. #define struct
  27. #define union
  28. #define enum
  29. #define typedef
  30. #define const
  31. #define unsigned
  32. #define signed
  33. #define extern
  34. #define register
  35. #define static
  36. #define volatile
  37. #define switch
  38. #define case
  39. #define for
  40. #define do
  41. #define goto
  42. #define default
  43. #define sizeof

此文件中提供了 print 和 readint 函数,另外,将所有 C 语言支持、但 TinyC 不支持的关键词全部 define 成空名称,这样来保证 gcc 和 TinyC 编译器的效果差不多。利用 gcc 编译的目的是为了测试和对比 TinyC 编译器的编译结果。

让我们先用 gcc 编译并运行一下上面这个典型的 TinyC 源文件吧。将以上代码分别存为 tinyc.cfor_gcc_build.hh,放在同一目录下,打开终端并 cd 到该目录,输入:

  1. $ gcc -o tinyc tinyc.c
  2. $ ./tinyc

将输出:

  1. 1! = 1
  2. 2! = 2
  3. 4! = 24
  4. 6! = 720
  5. 7! = 5040

如果您的系统中没有 gcc ,则应先安装 gcc 。如果你使用的是 debian ,可以用 apt-get 命令来安装,如下:

  1. $ sudo apt-get install build-essential

第 2 章完