Skip to content

Illusionna/TinyCC-Runtime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TinyCC-Runtime

指令

tcc main.c -o main.exe      // 直接生成二进制可执行文件
tcc -run main.c             // 以脚本形式运行
tcc -c main.c               // 生成 main.o 目标链接文件

tcc -E main.c -o main.i     // 预处理
gcc -S main.i -o main.s     // 编译(tcc 不支持,使用 gcc)
gcc -c main.s -o main.o     // 汇编(虽然 tcc 支持,但没有 gcc 汇编的 .def 命令,继续使用 gcc)
gcc main.o -o main.exe      // 链接

修复

  • 2025-04-28: win32/include/stdlib.hwin32/include/errno.h 头文件
(x) _CRTIMP extern int *__cdecl _errno(void);   // tcc 预处理生成 main.i 语法错误.
(√) _CRTIMP int *__cdecl _errno(void);          // 不需要 extern 关键词修饰.
  • 2025-04-29: win32/include/math.h 头文件
/** (x)
 * tcc 不支持汇编 t 约束.
float res;
__asm__ ("fabs;" : "=t" (res) : "0" (x));
return res;
**/
(√) return x < 0 ? -x : x;    // 直接用更加兼容的表达式.

新特性

  • 2025-11-22: 多线程 log.h 头文件.
#include <stdio.h>
#include "log.h"

int main(int argc, char *argv[], char *env[]) {
    log_trace("NB.");

    log_setting(0);
    FILE *f = fopen("log.log", "w");
    log_config_write(f);

    log_debug("Write to the file.");
    log_info("Oops?");

    fclose(f);
    return 0;
}
  • 2025-11-22: 多线程 os.h 头文件.
#include <stdlib.h>
#include "os.h"

int main(int argc, char *argv[], char *env[]) {
    os_getpid();
    os_access("demo.txt");
    char *buffer = os_readfile("demo.txt", 0, -1);
    free(buffer);
    return 0;
}
  • 2025-11-22: 多线程 socket.h 头文件.
#include <stdio.h>
#include "socket.h"

int main(int argc, char *argv[], char *env[]) {
    if (socket_init()) {
        return 1;
    }

    Socket S = socket_create(AF_INET, SOCK_STREAM, 0);
    if (S == SOCKET_INVALID) {
        socket_destroy();
        return 1;
    }

    if (socket_setopt(S, SOL_SOCKET, SO_REUSEADDR) == SOCKET_INVALID) {
        socket_close(S);
        socket_destroy();
        return 1;
    }

    struct sockaddr_in server;
    memset(&server, 0, sizeof(server));
    socket_config(&server, AF_INET, "127.0.0.1", 8080);

    if (socket_bind(S, &server, sizeof(server)) == SOCKET_INVALID) {
        socket_close(S);
        socket_destroy();
        return 1;
    }

    if (socket_listen(S, 16) == SOCKET_INVALID) {
        socket_close(S);
        socket_destroy();
        return 1;
    }

    while (1) {
        struct sockaddr_in client;
        int client_length = sizeof(client);

        Socket c = socket_accept(S, &client, &client_length);

        if (c == SOCKET_INVALID) continue;

        printf("client (%s:%d)", inet_ntoa(client.sin_addr), ntohs(client.sin_port));

        int n = socket_recv(c, buffer, sizeof(buffer) - 1, 0);
        if (n <= 0) {
            socket_close(c);
            return 1;
        }
        buffer[n] = '\0';

        socket_send(c, "Hello world!", 12, 0);
        socket_close(c);
    }

    return 0;
}
  • 2025-04-28: 多线程 thread.h 头文件.
// >>> tcc test-thread.c

# include <stdio.h>
# include <thread.h>
# include <windows.h>

int func(void *arg) {
    printf("thread is running...\n");
    Sleep(3000);
    printf("thread is done!\n");
    return 0;
}

int main(int argc, char *argv[], char *env[]) {
    _thread thread;
    if (create_thread(&thread, func, NULL) != thread_success) {
        printf("\x1b[31m[Error] failed to create thread.\x1b[0m\n");
        return 1;
    }
    Sleep(1000);
    printf("main is done!\n");
    return 0;
}
  • 2025-06-28: 哈希表字典 hashmap.h 头文件.
#include "hashmap.h"

int main(int argc, char *argv[], char *env[]) {
    HashMap *dict = hashmap_create();
    hashmap_put(dict, "1", "com");
    hashmap_put(dict, "11", "org");
    hashmap_put(dict, "111", "xyz");
    hashmap_put(dict, "2", "net");
    hashmap_put(dict, "33", "cn");
    hashmap_put(dict, "3", "edu");
    hashmap_print(dict);
    printf("%s\n", hashmap_get(dict, "111") ? hashmap_get(dict, "111") : "(null)");
    printf("%s\n", hashmap_get(dict, "1314") ? hashmap_get(dict, "111") : "(null)");
    printf("delete %s\n", hashmap_remove(dict, "11") == 0 ? "success" : "failed");
    hashmap_view(dict);
    hashmap_destroy(dict);
    return 0;
}

About

给 tcc.exe 编译器内置新的 C 语言头文件.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published