跳转至

Including C File Over HTTPS

实现了一个有意思的效果,让 C 语言可以从互联网上 #include 头文件。

include_files_from_internet.c
#define STB_SPRINTF_IMPLEMENTATION
#include <https://raw.githubusercontent.com/nothings/stb/master/stb_sprintf.h> // <- look at this 
#include <stdio.h>

int main() {
    char buffer[20];

    // Using functions defined by stb_sprintf.h
    stbsp_sprintf(buffer, "Hello %s", "NAVI");
    puts(buffer);

    return 0;
}

你知道的,4202 年,Everything Over HTTPS(笑

起因是 @rexim 2021 年的时候发了一个视频:Including C File Over HTTPS ,他通过修改 TinyCC 编译器完成了上述效果。但是现在 TCC 有一些变化,他的补丁不能用了。

我试着重新分析了 TCC 的源码,写了份新的 Patch

本想着记录分析过程,想了想也没什么值得记的,放在笔记本里不合适,就挪到这儿来了。

而且还顺带给 chibicc 也写了份。

不过 chibicc tokenize 的时候会把 // 之后的内容全部视为注释忽略掉,包括 <> 之间的内容,要改动的东西会比较多,就设计为把 HTTPS 链接放在双引号里:

#include "https://raw.githubusercontent.com/nothings/stb/master/stb_sprintf.h"

比起视频中的补丁,还额外添加了个一厢情愿的功能:让头文件下载到源码目录下,而不是当前目录(执行命令时的目录)下。

$ tcc /path/to/source/include_files_from_internet.c
$ chibicc /path/to/source/include_files_from_internet.c

文件将被下载到 /path/to/source/stb_sprintf.h

结束后的感想,chibicc TCC 的代码直观得多,注释也更全,感觉就像「我写大概也会是这样吧,有种默契感。

参考