TinyC编译器1—语法

1.数据类型及源程序结构

  • TinyC 中变量只有 int 一种数据类型(32位)
  • 函数的返回值可以声明为 int 和 void 两种类型,但编译器会自动为 void 函数返回一个 int 值
  • 不支持全局变量,只有局部变量,变量须先声明再使用
  • 变量声明必须放在函数体的最前面,不支持声明变量的时候赋初值
  • 不支持函数原型声明,函数声明必须和定义在一起,函数无需先定义再使用
  • 整个程序必须有一个不带参数的 main 函数,此为程序的入口
  • “//...” 以及 “#...” 为单行注释
  • 不支持 #include 等预处理命令,不支持多行注释
  • 只有赋值语句、函数调用语句、控制语句( if 语句)和循环语句( while 语句)

举个例子:

int main() {
    int a, b;
    int c, d;   // 变量声明必须放在函数体的最前面
    a = 0;
    ...
}

void func1(int a, int b) {
    ...
}

...

2.数据运算

支持这些逻辑运算符:+, -, *, /, %, ==, !=, >, <, >=, <=, &&, ||, !, -

注意:

  • 最后一个 “-” 表示 “反号” ,应和 “减号” 区别开来
  • TinyC 不支持 ++ 和 - - 
  • 赋值语句只能单独使用,不能嵌套!

3.输入及输出

输入1:

print("x = %d, y = %d", 2, 3);          // 输出: x = 2, y = 3

//自动换行,仅支持 %d 格式化

输入2:

x = readint("Please input an integer");

//readint 命令先打印提示信息,再从标准输入中读取一个整数并返回
//必须要有人接受它的返回值

3.控制及循环语句

  • TinyC 仅支持 if/else 和 while 语句, while 循环中支持 continue 和 break 
  • if/else 和 while 的执行体必须用花括号括起来。
  • 不支持 for 、 switch 、 goto 等其他语句

4.函数调用

支持函数调用,支持递归

5.关键字

void, int, while, if, else, return, break, continue, print, readint

6.应用以及gcc使用

来运行以下代码

#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 编译器会注释掉该行。

#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 编译器的效果差不多。

  • 打开终端
  • 使用nano编辑器来创建文件:nano tinyc.c           在 nano 中粘贴您的代码后,按 Ctrl+X 保存并退出。
  • 使用nano编辑器来创建文件:nano for_gcc_build.hh            在 nano 中粘贴您的代码后,按 Ctrl+X 保存并退出。
  • cd 打开相关路径(会给提示)                  语句:cd 路径
  • 语句:ls                                      查看是否存在文件
  • 输入          $ gcc -o tinyc tinyc.c
                  $ ./tinyc

最后会输出:

1! = 1
2! = 2
4! = 24
6! = 720
7! = 5040

注意:如果系统么有安装gcc,那根据不同的系统进行网上查找安装教程。

提示1:在ubuntu上

  1. 打开终端。
  2. 运行以下命令更新软件包列表:`sudo apt update`
  3. 安装gcc和相关的构建工具:`sudo apt install build-essential`
  4. 验证gcc是否成功安装:`gcc --version`

提示2:在debian上

$ sudo apt-get install build-essential
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值