c编译器学习04:chibicc的commits记录说明及所有代码的压缩包

整理commits记录的出发点

似乎没有更好的方法去学习代码。
最终决定听作者的建议,按照commits记录去看代码。

https://github.com/rui314/chibicc 页面316个commits实际对应295个版本,估计是有几个含有多次bug修正。

commits记录表格(图)

在这里插入图片描述

commits记录表格

序号SHAcommit msg中文说明
10522e2d77e3ab82d3b80a5be8dbbdc8d4180561cCompile an integer to an exectuable that exits with the given number将整数编译为退出时返回给定数字的可执行文件
2bf7081fba7d8c6b1cd8a12eb329697a5481c604eAdd + and - operators添加+和-运算符
3a1ab0ff26f23c82f15180051204eeb6279747c9aAdd a tokenizer to allow space characters between tokens添加词法分析器以允许令牌之间有空格字符
4cc5a6d978144bda90220bd10866c4fd908d07546Improve error message改进错误消息
584cfcaf98f3d19c8f0f316e22a61725ad201f0f6Add *, / and ()添加*、/和()运算符
6bf9ab52860c1cbbeeca40df515468f42300ff429Add unary plus and minus添加一元加和减
725b4b85b887c643e337a9fbcd1b0220b413952bfAdd ==, !=, <= and >= operators添加==、!=、<=和>=运算符
8725badfb494544b7c7f1d4c4690b9bc033c6d051Split main.c into multiple small files将main.c分割为多个小文件
976cae0ad05b6ba3e3e927b2b749ccddda23f0c51Accept multiple statements separated by semicolons接受由分号分隔的多条语句
101f9f3adf324af1432a380b41c7690834e649e346Support single-letter local variables支持单字母局部变量
11482c26b536f8e5c998af6210470cd3d97a47ee9aSupport multi-letter local variables支持多字母局部变量
126cc1c1f0643ce0f1af0857e024a0a438ddb45853Add “return” statement添加"return"语句
1318ac283a5d19c19f1e1a7020a50fe34c2160a0f8Add { … }添加{ … }
14ff8912c68e877744f8b15070e098af786e7bd296Add null statement添加空语句
1572b841508f562c65b427a502fe6b270c3717319bAdd “if” statement添加"if"语句
16f5d480f139592cc2670c2b05076c39b2fd6fe9b3Add “for” statement添加"for"语句
171f3eb34f637520b01e6b8cd10a9026d05036db6dAdd “while” statement添加"while"语句
185b142b1dcf6561df3c44a743965af3bd4e619112Add LICENSE and README.md添加LICENSE和README.md
193d8627719be00e39070eaca0ee5b599f2a877c5cAdd a representative node to each Node to improve error messages为每个节点添加代表节点以改进错误消息
20863e2b8de25fdf43a4a63b93d0f57718e9edaa47Add unary & and *添加一元&和*
21a6bc4ab101c20b6398fd6bbfe124665bb7db5d25Make pointer arithmetic work使指针算术工作
22b4e82cf7ce1cbfff8dd30f20fdad73fd3f1d5ccbAdd keyword “int” and make variable definition mandatory添加关键字"int"并使变量定义成为必须
2330a39926272a8341c52018654ca18d2c86ba662bSupport zero-arity function calls支持零参数函数调用
24964b1d2a0e3e46882743f16703cb12b51e724179Support function call with up to 6 arguments支持最多6个参数的函数调用
256cb4220f339e7d2a894e44b61c90c576a482914bSupport zero-arity function definition支持零参数函数定义
26aacc0cfec24e0aef1e884ac8b657e182a33a7b1cSupport function definition up to 6 parameters支持最多6个参数的函数定义
278b6395d0f2be4024bd7e7921157a6496951eb162Add one dimensional arrays添加一维数组
283ce1b2d067164f754dcb4216c193dc98e164b3ceAdd arrays of arrays添加数组的数组
29648646bba704745274fcd4fef3b7029c7f7e0fcdAdd [] operator添加[]运算符
303e55cafef80f0fc9d74bb06ea174de4b53e2ef94Add sizeof添加sizeof
310b7663481d0513067e0c0af04765b8578ae2a498Merge Function with Var将函数与变量合并
32a4d3223a7215712b86076fad8aaf179d8f768b14Add global variables添加全局变量
33be38d63d1b9cd236ef3ec884eedad8112bb6e6f9Add char type添加char类型
344cedda2dbeca6bd81d2bd00032f7cff46e0a985eAdd string literal添加字符串字面量
3535a0bcd366163168bf3337975130f62fc1c30235Refactoring: Add a utility function重构:添加一个实用函数
36ad7749f2fad87a4b1df644d4e1c345b3f87d386dAdd \a, \b, \t, \n \v, \f, \r and \e添加\a、\b、\t、\n、\v、\f、\r和\e
37699d2b7e3f4ea4ba6ec2d5080f87e243989a5835Add <octal-sequence>添加<八进制序列>
38c2cc1d3c4500caa34da5e68eb62b7474caf96fe2Add \x添加\x<十六进制序列>
399dae23461eb6250865f4ee727a0e727a6a4e03ba[GNU] Add statement expression[GNU] 添加语句表达式
40d9ea59757e2710e34f105e98230f30f578e0e662Read code from a file instead of argv[1]从文件读取代码而不是argv[1]
417b8528f71c78a01e8ff41a76a83a320d1ef80e93Refactor – no functionality change重构 – 功能无变化
42a0388bada4016bc0c3be6154c159faf80ce18d01Add -o and --help options添加-o和–help选项
436c0a42926a10ea5abc781c9db89b105e007512b1Add line and block comments添加行注释和块注释
44ca8b2434c97fc37c14eddcb3a4e831d030ebb041Handle block scope处理块作用域
45cd832a311e56bda981c9c957ba45f1bc1f6cc737Rewrite tests in shell script in C用C语言脚本重写测试
466647ad9b843768968db0a331ff7077904c6f58eePrecompute line number for each token为每个令牌预计算行号
471c91d1943a8ee07034224dd950412c3c87ef3276Emit .file and .loc assembler directives发出.file和.loc汇编指令
48e6307ad374eeecd6474286b1b6fda5b3dda89d9aAdd comma operator添加逗号运算符
49f814033d04c4cefdbcf8174d65011d484d69303cAdd struct添加结构体
509443e4b8bc587b670f9b448b03842530cd355760Align struct members对齐结构体成员
51dfec1157b41bb86c8cb66eee0b0cbdb9dcccb6f4Align local variables对齐局部变量
52e1e831ea3ee46ed7d4c975822f418d60d3050e1bSupport struct tags支持结构体标签
53f0a018a7d6f5e3847d7e66e324c5f71a55c8b5efAdd -> operator添加->运算符
5411e3841832697c8ba4a1d68f5daa05045f70a716Add union添加联合体
55bef05432c9d3289636ed1d360ca9b863a0698dc7Add struct assignment添加结构体赋值
565831edaab3eb6d56126c08f01f5639222602f7e5Change size of int from 8 to 4将int的大小从8改为4
5743c2f0829f7d4ec3b96132b9964a778ff816b2ebAdd long type添加long类型
589d48eef58b964551350fe0c1f641a57f5da40529Add short type添加short类型
59a817b23da3c6f39f22bc57c0a53169978d97d7faAdd nested type declarators添加嵌套类型声明符
6074e3acc296d90d6d16ae70803196e967564fb16aAdd function declaration添加函数声明
618c3503bb94bd6b2d57e1f979d9fc1d84383b2961Add void type添加void类型
62287906abb85081b961e118bb80b30decb93fba6fHandle complex type declarations correctly正确处理复杂类型声明
63f46370ef98adec5d3a840d69a6b34a03d80b0699Add long long as an alias for long添加long long作为long的别名
64a6b82da1ae9eefa44dada0baa885c283823ad59aAdd typedef添加typedef
6567543ea113c5cc2b15881e2bbb85ffd44feaef1fMake sizeof to accept not only an expression but also a typename使sizeof不仅接受表达式还接受类型名
66cb81a379d9f7aef32fb1bbebd18f8618e1617a3fUse 32 bit registers for char, short and int对于char、short和int使用32位寄存器
67cfc4fa94c1eb17f37466571f74bbdfae03a6e11fAdd type cast添加类型转换
688b430a6c5fd6d33a637f2c615f8e5ec59e7be30eImplement usual arithmetic conversion实现通常的算术转换
699e211cbf1d459babf035fd6b3407c2bd184cb639Report an error on undefined/undeclared functions报告未定义/未声明的函数错误
70818352acc07d0a982076b4b49345b42be706f5e1Handle return type conversion处理返回类型转换
71fdc80bc6b5faa058b88d838332c71b7101712896Handle function argument type conversion处理函数参数类型转换
7244bba965cbe3827be2b68651e541b33fa040bb72Add _Bool type添加_Bool类型
73aa0accc75e9358d313fef0a6d4005103e2ce25f5Add character literal添加字符字面量
7448ba2656fecc646ec4eb7f943fa94b02ed9725c7Add enum添加枚举
75736232f3d672dae9a1ddae800909204c17fbe37cSupport file-scope functions支持文件作用域函数
76a4fea2ba3edeb8ab5a0812a09f14c2a771aa196cAllow for-loops to define local variables允许for循环定义局部变量
7701a94c04aa2b5a95ac4038bd0d6fd5334fcbf882Add +=, -=, *= and /=添加+=、-=、*=和/=
7847f19371f75db9029ea1b8b3783624fb7838d2dbAdd pre ++ and –添加前置++和–
79e8ca48cf41f5f3113cadfb23acfedad7b9fa2e63Add post ++ and –添加后置++和–
807df934d2b63727d67d1c054975893930fa6aff44Add hexadecimal, octal and binary number literals添加十六进制、八进制和二进制数字字面量
816b88bcb306ef80b65d7f99c081ba83283b4ffac5Add ! operator添加!运算符
8246a96d6862e4c1317ff48df69391fd98a1ae5e3dAdd ~ operator添加~运算符
83daa739817c58baa8dcd0c23bb403d27d5907abfbAdd % and %=添加%和%=
8486440068b43d6f9c93fdb07c1c2279cbab579e73Add &,, ^, &=,
85f30f78175c1fd50c8cdd132ca804573ae0d18453Add && and
8629ed294906ebc271c32a755e1aefc360df4d3863Add a notion of an incomplete array type添加不完整数组类型的概念
8779632219d0991aae83e1de3c56df7d664205c2b6Decay an array to a pointer in the func param context在函数参数上下文中将数组衰减为指针
8861a10551209a0d3770449862152e1b73b584d771Add a notion of an incomplete struct type添加不完整结构体类型的概念
896116cae4c4b98ef9ed55736f3a6c1d872de97767Add goto and labeled statement添加goto和标签语句
90a4be55b333c9f712c334aac81e7ef4e076c2bc9bResolve conflict between labels and typedefs解决标签和typedef之间的冲突
91b3047f2317b74f19fb44dfe5e577d586d93dfa3cAdd break statement添加break语句
923c83dfd8af045ae6923d4ccb3a3a5a50f4012346Add continue statement添加continue语句
93044d9ae07ba700c52d8342e4eee26e07eea11619Add switch-case添加switch-case
94d0c0cb74b21f431c62f7eeb8dbc0d6e14c1eff14Add <<, >>, <<= and >>=添加<<、>>、<<=和>>=
95447ee098c51f6f615ef560b35d429f32f0cb5a35Add ?: operator添加?:运算符
9679f5de21eb706ea5486fd682a83ffbde7e4d16a9Add constant expression添加常量表达式
9722dd560ecf06e9ac4a4c1be33be74bac7924f06aSupport local variable initializers支持局部变量初始化器
98ae0a37dc4b39018a95616836ae4aaf4c8bfd779bInitialize excess array elements with zero用零初始化超出数组元素
99a754732c046939cd87ac9fc8e9483ae9b3369449Skip excess initializer elements跳过多余的初始化元素
1000d717373cc9e247fc6f6a0e02b0bbd424f0d70b0Add string literal initializer添加字符串字面量初始化器
1015b955336032881edf835a50fb63f9581af1efd73Allow to omit array length if an initializer is given如果给定初始化器,则允许省略数组长度
102e9d2c46ab3cc8b8518df289a4fc24a9e3fc9b3feHandle struct initializers for local variables处理局部变量的结构体初始化器
103aca19dd35027a12e245bfa52e6a98968e0cd2a9cAllow to initialize a struct with other struct允许使用其他结构体初始化结构体
104483b194a80e904c11c5c6d855303596145adaceeHandle union initializers for local variables处理局部变量的联合体初始化器
105bbfe3f4369e1dd2266b827c81d7d9078ab1d301fAdd global initializer for scalar and string为标量和字符串添加全局初始化器
106eeb62b6dd547da5742f3ed74f8c8ae534d883dd9Add struct initializer for global variable为全局变量添加结构体初始化器
1071eae5ae3678d079efc7d2807f10439e53932f811Handle union initializers for global variable处理全局变量的联合体初始化器
108efa0f3366ddb914cc29f96fcdf10f99ded61775cAllow parentheses in initializers to be omitted允许在初始化器中省略括号
109a58958ccb40a127a83e3383ef3887e4721352238Allow extraneous braces for scalar initializer允许对标量初始化器使用多余的大括号
110fde464c47cb69e030b58d8d204a508d6babd3e09Allow extraneous comma at the end of enum or initializer list允许在枚举或初始化列表的末尾使用多余的逗号
1113d216e3e06eee7ea3679503867a619c28458e8a7Emit uninitialized global data to .bss instead of .data将未初始化的全局数据发到.bss而不是.data
112824543bb2f2b2e4f445d8c58b32f53bf1eec63ceAdd flexible array member添加灵活数组成员
113cd688a89b8a57e9614f278e29a9267709494d236Allow to initialize struct flexible array member允许初始化结构体灵活数组成员
1147a1f816783064a12156807fe0a4d760c2e212d4eAccept void as a parameter list接受void作为参数列表
115157356c769d777b1721da8218724608081137fe2Align global variables对齐全局变量
116006a45ccd475296ee19ec87891523d89ce3f2f24Add extern添加extern
11727647455e4cb7db1545a7b69c3a324aa025a471aHandle extern declarations in a block在块中处理extern声明
1189df51789e7fd36fc1580bcd80676f9bcc4e24be1Add _Alignof and _Alignas添加_Alignof和_Alignas
119310a87e15e98bb5abfd86ea7bb2a1cca1f5243c7[GNU] Allow a variable as an operand of _Alignof[GNU] 允许变量作为_Alignof的操作数
120319772b42ebc2311a56ef54e1e9a60c5583971b1Add static local variables添加静态局部变量
121127056dc1de6ddad280f6cf09cb15538dca22f43Add compound literals添加复合字面量
12230b3e216cd4eca3b8a13cb0a0613f053ac1d4925Add return that doesn’t take any value添加不带任何值的return
123eb85527656f77b9532f3a78cefde7a2eb739189eAdd static global variables添加静态全局变量
124ee252e6ce79d752526504cf034fd41f070191824Add do … while添加do … while
1256a0ed71107670b404af04bc20a2461165483f390Align stack frame to 16 byte boundaries将栈帧对齐到16字节边界
126dcd45792264795a32f19581a904dda8bf6d3ad06Handle a function returning bool, char or short处理返回bool、char或short的函数
12758fc86137c23adc3d98be40117087c645a9d7e4eAllow to call a variadic function允许调用可变参数函数
128754a24fafcea637cab8bc01bb2702069109a0358Add va_start to support variadic functions添加va_start以支持可变参数函数
129197689a22b38df2ced90e03117914a2248238c20Check the number of function arguments检查函数参数数量
1303f59ce79554fcbccd15d42ff4b4ddb91812c7045Add signed keyword添加signed关键字
13134ab83bdf49a23a47bc90354a5a4d22686d8d92aAdd unsigned integral types添加无符号整型类型
132aaf10459d93fb6c0f4539cb792c02a8d15cb0299Add U, L and LL suffixes添加U、L和LL后缀
1338b8f3de48bba31ccfa84e3573075b2125bc130c3Use long or ulong instead of int for some expressions对于某些表达式,使用long或ulong而不是int
1346880a39d2a5aec8e5ed32c276109936ed503d0bbWhen comparing two pointers, treat them as unsigned比较两个指针时,将它们视为无符号
1357ba6fe8d94af2a232a9da82b815502513f52e465Handle unsigned types in the constant expression在常量表达式中处理无符号类型
136b77355427575385b6f0b6c0a914600b79b4e4412Ignore const, volatile, auto, register, restrict or _Noreturn.忽略const、volatile、auto、register、restrict或_Noreturn。
13793d12771d009924fb598b088dc4bd9b67fd9a09aIgnore “static” and “const” in array-dimensions忽略数组维度中的"static"和"const"
1381fad2595d6fa67e57cd795d4faac4306e42e72c5Allow to omit parameter name in function declaration允许在函数声明中省略参数名
1391e57f72d8adf15937856a3ca3ca0e16ccb37421eAdd floating-point constant添加浮点常量
14029de46aed47e5308db9a0aef6e13610dea8fb389Add “float” and “double” local variables and casts添加"float"和"double"局部变量和类型转换
141cf9ceecb2f8cad2fb694b15c14ca1cf98e9524e7Add flonum ==, !=, < and <=添加flonum ==、!=、<和<=
14283f76ebb66712a2560b2993e92265b574b1ab7edAdd flonum +, -, * and /添加flonum +、-、*和/
1430ce109302715f8186b90671a53517a63a2741022Handle flonum for if, while, do, !, ?:,
1448ec1ebf176b88522fc4ec3980d20c78e13fdd526Allow to call a function that takes/returns flonums允许调用接受/返回flonums的函数
145c6b30568b407e7b60b6fc2929801669434e4f91aAllow to define a function that takes/returns flonums允许定义接受/返回flonums的函数
1468b14859f63a8389882bdb9330de592a112affa18Implement default argument promotion for float对float实现默认参数提升
147e452cf721511dbf0d7f8c8f469f2dd67d8a5ee93Support variadic function with floating-point parameters支持带有浮点参数的可变参数函数
148ffea4219b1f4ebe7c06cecc6c221cb0aab3a03eaAdd flonum constant expression添加flonum常量表达式
1499bf96124ba1e0cb95f491bd0c91d4e9c7a9850daAdd “long double” as an alias for “double”将"long double"作为"double"的别名添加
1505d15431df1abab3a5cf596fabe0a77c030a10791Add stage2 build添加stage2构建
151d06a8ac6e6120861c9c79acb15b9a18693e4ee47Add function pointer添加函数指针
152c5953ba1328fa86f906406843eb9f23cd596ef04Decay a function to a pointer in the func param context在函数参数上下文中将函数衰减为指针
15353e81033ce18fd94fcdcde9010b7c9d41f30aa2cAdd usual arithmetic conversion for function pointer为函数指针添加通常的算术转换
154f3d96136f292dea83fd760098d189a6884f59eb0Split cc1 from compiler driver将cc1从编译器驱动程序中分离
155140b43358c33fb5e9f86789541dbca306bb64fccRun “as” command unless -S is given除非给定-S,否则运行"as"命令
156b833cd0f297ba7979c23cff1b88c27beb4f2f737Accept multiple input files接受多个输入文件
1578b726b54893e11427533fcceb7206b97c25f50a6Run “ld” unless -c is given除非给定-c,否则运行"ld"命令
1581e1ea39dadd0035443f1d15c651deaf979341879Add a do-nothing preprocessor添加一个不做任何事的预处理器
159146c7b3dd47bb65da2da86cce7f4d75d8efa157dAdd the null directive添加null指令
160d367510fcc1396fa252c4b87439c2f9fcd0abbe7Add #include “…”添加#include “…”
161ec149f64d2f5c41a2080c0b4e42e4ef64444b382Skip extra tokens after #include “…”跳过#include "…"后的额外令牌
162d138864a2a99849e43d81ca071b7a799edc0e65aAdd -E option添加-E选项
163bf6ff928ad17d98d07f68f619e6cbe29829d0a20Add #if and #endif添加#if和#endif
164aa570f3086ce3e2c5ac8bf6107c051fed5aabf89Skip nested #if in a skipped #if-clause跳过被跳过的#if子句中的嵌套#if
165c6e81d22f8189cd7bfcfcc33e4ac462529418192Add #else添加#else
166e7a1857a31fc0c0012773c021639a6297f5b208fAdd #elif添加#elif
16797d33ad3bdc21c26356253046902d4b166bd115bAdd objlike #define添加objlike #define
1689ad60e41d512158d942d1bf3808682ede6ef5118Add #undef添加#undef
1692651448084a56dd0b960989798772e71e12e6c30Expand macros in the #if and #elif argument context在#if和#elif参数上下文中扩展宏
170acce00228b842af35df5af8c97398765a386ab1eDo not expand a token more than once for the same objlike macro不为同一个objlike宏多次扩展一个令牌
1711f80f581e517ae4a5df6ab38af48a0d2a1089c73Add #ifdef and #ifndef添加#ifdef和#ifndef
172dec3b3fa02ffb343c37f82d36ae02be6bb30eb03Add zero-arity funclike #define添加零参数funclike #define
173b9ad3e43cf7479712972514aa3f2c55a0f650f76Add multi-arity funclike #define添加多参数funclike #define
174dd4306cdd8158f76f094fc699530311228536adbAllow empty macro arguments允许空宏参数
175c7d7ce0f0cbd5869259a3365211ab92126a27ff6Allow parenthesized expressions as macro arguments允许将括号表达式作为宏参数
1761313fc6d3a77cedbca18fa0ffee1a86d0903ad7fDo not expand a token more than once for the same funclike macro不为同一个funclike宏多次扩展一个令牌
1778f6f7925a04ca070167a38b8952a1a0bb7b63d23Add macro stringizing operator (#)添加宏字符串化操作符(#)
1788f561aed9b7a47c38afd8c1cc75bc9a700ae97b5Add macro token-pasting operator (##)添加宏令牌粘合操作符(##)
179769b5a0941694ccdcfe61528053c3d93cb53de80Use chibicc’s preprocessor for all tests对所有测试使用chibicc的预处理器
1805cb2f89e6a49cac8ddb16f46df92c31fa2507b9aAdd defined() macro operator添加defined()宏操作符
181a8d76ad435891deee9deebbc3a825062fd6cd45aReplace remaining identifiers with 0 in macro constexpr在宏constexpr中用0替换剩余的标识符
1828075582c21496530e3b1847f5bad11c42941066ePreserve newline and space during macro expansion在宏扩展中保留换行符和空格
183b33fe0ea828e6a8ff3ec2d8bd5845da2b337afa5Support line continuation支持行续接
184d85fc4ffcfb8875aa191481e5c153a1e07066f8eAdd #include <…>添加#include <…>
185a1dd6213c85dfa6f36f74fd00ade09ed9fa3e467Add -I option 添加-I 选项
186a939a7a90638631c296dfb63d857b24555b25327Add default include paths添加默认包含路径
187e7fdc2e3f1d20d38ad61f6cb87e72c613b7696c7Add #error添加#error
1885f5a8507ff2f2509c27ac1a196fd1874345e5e95Add predefine macros such as STDC添加预定义宏,如__STDC__
1896f17071885b98ac5dcdcc0b233ff204150a6826cAdd FILE and LINE添加__FILE__和__LINE__
190dc01f94900a9cabf40bb6ec2c5be8b4665c30edaAdd VA_ARGS添加__VA_ARGS__
191ba6b4b63751ed65f2fcd74965d2b337a1a65752bAdd func添加__func__
19282ba010c764d3dc4d0f72a9ee5a6d6f72780e75f[GNU] Add FUNCTION[GNU] 添加__FUNCTION__
193ab4f1e1e197ecae40299b99dc00b1c92a4a3cb28Concatenate adjacent string literals连接相邻的字符串字面量
1947746e4ee0b254da6311202c7db3d2fddd4c6a52cRecognize wide character literal识别宽字符字面量
1957cbfd111d38b70110c9adcdfdae86d07995ae534Add stdarg.h, stdbool.h, stddef.h, stdalign.h and float.h添加stdarg.h、stdbool.h、stddef.h、stdalign.h和float.h
1965322ea8495d70be81a6b80f7a88850b85bfba240Add va_arg()添加va_arg()
19712a9e7506c092fcbab8852db85c3aebefc8a8c81Self-host: including preprocessor, chibicc can compile itself自托管:包括预处理器,chibicc可以编译自身
198b29f0521025c95ff331ddb58258b1083f8efd9ffSupport passed-on-stack arguments支持通过堆栈传递的参数
1999021f7f5decea3e7954f138e9bac4cfea26292beSupport passed-on-stack parameters支持通过堆栈传递的参数
2005e0f8c47e3bd91f589710a28f09b718d4a0ec6f3Allow struct parameter允许结构体参数
201d63b1f410a7aa3d308d0620d640f417a87b0c838Allow struct argument允许结构体参数
202c72df1c9be535bdfd5b46609996bf1eaf540acedAllow to call a fucntion returning a struct允许调用返回结构体的函数
203d7bad961146b9f2fd918f05fd59a50f3f65bf325Allow to define a function returning a struct允许定义返回结构体的函数
204b6d3cd00df7d0496fca2af2c34e72ab3e6af4028Allow variadic function to take more than 6 parameters允许可变参数函数接受超过6个参数
205603de502fd8bad750d48aaf9a66c547e5ca04c2aAdd va_copy()添加va_copy()
206e0b5da3b395e46bbc2e377a59d5cba33206288a9Dereferencing a function shouldn’t do anything函数解引用不应该做任何事情
2073f2c2d5bca4f4506e0ab0b03959d96be427fa672Tokenize numeric tokens as pp-numbers将数字令牌作为pp-numbers进行词法分析
208fc69f5c6f9b3aeb5d6ee61353f0ed0df28f954c5Add -D option添加-D选项
209be8b6f6d31f0c73c2aabffdf2794f20c69567cdbAdd -U option添加-U选项
210cc852fe99d0acfc6d547b36c75ff85e90975ad36Add bitfield添加位域
211441a89b80babf98d3feb13e4594ee01eb6cc4dd5Support global struct bitfield initializer支持全局结构体位域初始化器
21254c2b3b18fb80235ad9ee53cac3966e8aad9e12aHandle op=-style assignments to bitfields处理位域的op=-风格赋值
21317ea802ceaa76f55726488379959a983f891f631Handle zero-width bitfield member处理零宽度位域成员
214c302a969d8217ab46113d494b8cd773cf057193dDo not allow to obtain an address of a bitfield不允许获取位域的地址
2152bdc6b800c1dbe6db584b91046785d4c48c41fb2Write to an in-memory buffer before writing to an actual output file在写入实际输出文件之前写入内存缓冲区
216b1fdddff1523d2ca7bab4050434499d3a5ac39a1Ignore -O, -W and -g and other flags忽略-O、-W和-g以及其他标志
2172c91da54dff93a365feec5a34f8eaeccca3e3a70Turn on -Wall compiler flag and fix compiler warnings打开-Wall编译器标志并修复编译器警告
2185257ee0f202a5f9c4e5bcb576646cefe70f3ae91Make an array of at least 16 bytes long to have alignment of at least 16 bytes使至少16字节长的数组具有至少16字节的对齐
2199c36dd727c736dc3a3ffa6ce7ce473966d802068Make “main” to implicitly return 0使"main"隐式返回0
220c3075b3030c0488df1e7aa9f600da0f66072186bAdd anonymous struct and union添加匿名结构体和联合体
221e27417fcde500f6c01ce0dbee57a1af137510a09Add DATE and TIME macros添加__DATE__和__TIME__宏
2220e77f3dff8b44547da4639c9609c216c9c896fa5[GNU] Add COUNTER macro[GNU] 添加__COUNTER__宏
22374bcec5b22a601451fac9d0878003d04205abca6Canonicalize newline character规范化换行符
224c31886aa7a52fd8639e09bbdf8ac8ea854c313f6Add \u and \U escape sequences添加\u和\U转义序列
225a57c661d46d9523bed01ad1b074f7a78d9e94ca3Accept multibyte character as wide character literal接受多字节字符作为宽字符字面量
226454618cd15c2c87d9f5a6a6727e1b09a8e22a799Add UTF-16 character literal添加UTF-16字符字面量
2272dac3afece31c27bf773efbc1f30c6a67088d3b6Add UTF-32 character literal添加UTF-32字符字面量
22857b21fe90296c867888d7c8c60d243bc254a39d7Add UTF-8 string literal添加UTF-8字符串字面量
2299cabe1f204a8a6139e8b072dfd6f0a15275ad25fAdd UTF-16 string literal添加UTF-16字符串字面量
230c467ee665de0c385170850ecc895add04b52b8a3Add UTF-32 string literal添加UTF-32字符串字面量
231cae061af2b65ad0962fb4b6fe3b55abe2f3a5bf8Add wide string literal添加宽字符串字面量
23236230e0827ca33a9b09ea5aa7b06e170fd188ca1Add UTF-16 string literal initializer添加UTF-16字符串字面量初始化器
2336adba75af879d8ac2bc43a7337b02e64d10e60f1Add UTF-32 string literal initializer添加UTF-32字符串字面量初始化器
234e4491b811510d08f880d0f9c7553ecfd18635469Define STDC_UTF{16,32}_ macros定义__STDC_UTF_{16,32}__宏
2350e5d250ebfd29845c8c26b0ad63379994a2b8560Allow multibyte UTF-8 character in identifier允许在标识符中使用多字节UTF-8字符
236adb8b988897758d0d4f74dcd9129bff0831634ae[GNU] Accept $ as an identifier character[GNU] 接受$作为标识符字符
237238277714ddc407f966f3c503e13a114d6a91630Allow to concatenate regular string literals with L/u/U string literals允许将普通字符串字面量与L/u/U字符串字面量连接
2382b2fa25507cdc491d2b5dafb2c4b5e33158b996aSkip UTF-8 BOM markers跳过UTF-8 BOM标记
239c618c3b582de1d0b10b334a4f2ba6b85d5128940Add array designated initializer添加数组指定初始化器
240835cd24b2c4598ee784d8bfd1c0427bfa948b947Allow array designators to initialize incomplete arrays允许数组指示器初始化不完整数组
241691c4fac1529eaf1d825ca6093800912a4df3c91[GNU] Allow to omit “=” in designated initializers[GNU] 允许在指定初始化器中省略"="
24267f5834378660abf271722a16294a634106d047eAdd struct designated initializer添加结构体指定初始化器
24331dc1dfa211ee27e74907ce3aa3986401dcedb82Add union designated initializer添加联合体指定初始化器
24495eb5b01b30b24d68cbeb3991f65c617fc2a35cbHandle struct designator for anonymous struct member处理匿名结构体成员的结构体指示器
24537998be0c183508e54f10f57d63d87e6e7eb0607Improve error message for multibyte characters改进多字节字符的错误消息
246c61c0d00252a8704ff2731f6a57bad3657b84170Add #line添加#line
247aaf20fb96eaf21ead775fde6bad00d8e71650b5a[GNU] Add line marker directive[GNU] 添加行标记指令
248922604ae1e29fd1283fcc557e294a7272116c094[GNU] Add TIMESTAMP macro[GNU] 添加__TIMESTAMP__宏
2493a10c8aa44250e51dfe33e50b3121d6061faee4b[GNU] Add BASE_FILE macro[GNU] 添加__BASE_FILE__宏
250338144869fa82097d7767a032cbaac616ba0cd01Add VA_OPT添加__VA_OPT__
251083c27559e5d8fce9c3b588fc4c01769ca9dd10d[GNU] Handle ,##VA_ARG[GNU] 处理,##VA_ARG
25274ec9f6f3964d4beaa3970bd99c8660f958b694eIgnore #pragma忽略#pragma
253007e526ec50bde4b366d0927ad20d9cd4ac53abf[GNU] Support GCC-style variadic macro[GNU] 支持GCC风格的可变宏
2547d80a5136d1b2926dd0776c51896c40723c518c5Add typeof添加typeof
2551433b404d68f9fe314ae2955d0988dd74e5ecb92[GNU] Add __builtin_types_compatible_p[GNU] 添加__builtin_types_compatible_p
2561faab48ecf83d31a4fd781f10f6f00acb681d2ddAdd _Generic添加_Generic
257aee7891acb3e653dcfb10ec4172ae4d099ebf034[GNU] Allow sizeof()[GNU] 允许sizeof(<函数类型>)
258e28a612e9c2293182a83d5a7c6f48129455ce951[GNU] Add ?: operator with omitted operand[GNU] 添加省略操作数的?:运算符
259a2535163e232cd547b14960bf4232305d239741dAdd basic “asm” statement添加基本"asm"语句
26031087f8d4bbc06e5bec44cb14cab3a922b5e4855Handle inline functions as static functions将内联函数处理为静态函数
261e5f4ca90fd2bf950189c98ed7f1873c9f35131f3Do not emit static inline functions if referenced by no one如果没有人引用,则不发出静态内联函数
2626a2dc5a48a75b65aa2e3f606d195ef0fef3c4442Use attribute((format(print, …))) to find programming errors使用__attribute__((format(print, …)))找到编程错误
26311fc259b01c4a855e53ffdb2b86c1030f9c18586Add -idirafter option添加-idirafter选项
2641b99badce48083c5fa6b8b5872e899c7d1a47f9aAdd offsetof添加offsetof
26585e46b1071b54649740b35df939f32ed188c0e13Add tentative definition添加暂定定义
2666d344ed9459bd0328de53a58505a397d92cb0c8aAdd -fcommon and -fno-common flags添加-fcommon和-fno-common标志
267b3772845bd07fb695ca6b6e67ad7640776ae0f6cAdd thread-local variable添加线程局部变量
2688f5ff07dc08d258209adf60ed8e796efa7b7a476Add -include option添加-include选项
269ee0a951b30646023ccc9a144afb4b380bf8d09b1Add -x option添加-x选项
2704064871212049d82af3632941d15e6a0757ebc3cMake -E to imply -xc使-E意味着-xc
27177275c546a5340f94ad011cd759ef162bc714ba6Add alloca()添加alloca()
272e8667afd08ecbf7c9b05beb4ff399959d9722ff9Add sizeof() for VLA为VLA添加sizeof()
27307f901057f5c6aa77c0f15f7a22dc0b88923c227Add pointer arithmetic for VLA为VLA添加指针算术
2742fa8f489f3a852bd5bb17e023fdc5ea3a606100dSupport sizeof(typename) where typename is a VLA支持sizeof(typename)其中typename是VLA
275b0109a30c9fa24fedcb4d79bb17788e7ed228636Do not define STDC_NO_VLA不定义__STDC_NO_VLA__
276bc2527944a83c1bc951a429530f39e93dc5235b2Add -l option添加-l选项
277c32f0e21e71f43e64a7b98c9d96d4c513d42ba37Add -s option添加-s选项
2788d130ab93f65f7ef79839aba87459e4f9507ba39Emit size and type for symbols为符号发出大小和类型
279d56dd2f46e4049f017eae0dc99b2d16e78b88beeRecognize .a and .so files识别.a和.so文件
280e0bf168041ef60687b5d4454a93fc78c4f3acc48Add long double添加long double
281d90c73b6058af4b22a4edd610713f75b2478e356[GNU] Support case ranges[GNU] 支持范围case
2823d5550e29a92708613c3a351c0857aea90e147a5[GNU] Support array range designator[GNU] 支持数组范围指示器
2834f165ec60baa74f244d0a7c9b64c4bb3cbb76173[GNU] Support labels-as-values[GNU] 支持标签作为值
284f0c98e0d590ffae286a8a4847c91212c734be8e3[GNU] Treat labels-as-values as compile-time constant[GNU] 将标签作为值视为编译时常数
2850aad326f3550b3d4c499d4078fcc65cc2dbf7626Add string hashmap添加字符串哈希表
28630520e5a7c73a6613cfcef38d72058e7cccde1f4Use hashmap for macro name lookup使用哈希表进行宏名称查找
287655954e301621737988a4fa0a2c72ffc24285c8dUse hashmap for block-scope lookup使用哈希表进行块作用域查找
288f6944133d211ec6fb71c41f118905e16a752135bUse hashmap for keyword lookup使用哈希表进行关键字查找
289d0c4667b6bccf35ddf069c777689cd18c6a632b3Add -M option添加-M选项
29095d5a46234f98f3793c965bebe036361cbb1978eAdd -MF option添加-MF选项
29157c1d4ec0290d49fa1e954ff3e7a51e24d71a3a1Add -MP option添加-MP选项
292db850f37a2a284bf18cea427e4676a22d83d04b8Add -MT option添加-MT选项
293fb5cfe5d17fd0c0cbc0d17789c065b9bb86ba3c4Add -MD option添加-MD选项
2947aa72e41e6b2703b3f357507252008ebe25dc08dAdd -MQ option添加-MQ选项
295c3edffbbb06be9d586ee4f1cf678049b7d81369dAdd -MMD option添加-MMD选项

python下载脚本和对应的txt

import requests  # 需要 pip install requests
import os

def download_and_rename(sha, index):
  """
  下载指定 SHA 哈希值的文件并重命名。

  Args:
    sha: 文件的 SHA 哈希值。
    index: 文件的索引号。

  Returns:
    下载的文件名。
  """

  url = f"https://codeload.github.com/rui314/chibicc/zip/{sha}"
  filename = f"{index:03d}.zip"
  filepath = os.path.join("./temp", filename)

  # 创建 temp 目录
  os.makedirs("./temp", exist_ok=True)

  # 下载文件
  response = requests.get(url, stream=True)
  with open(filepath, "wb") as f:
    for chunk in response.iter_content(chunk_size=1024):
      if chunk:
        f.write(chunk)

  return filename


if __name__ == "__main__":
  with open("3.txt", "r") as f:
    for line in f:
      i, sha = line.strip().split(",")
      index = int(i)
      filename = download_and_rename(sha, index)
      print(f"下载并重命名文件 {filename} 成功")

对应的3.txt中的内容

1,0522e2d77e3ab82d3b80a5be8dbbdc8d4180561c
2,bf7081fba7d8c6b1cd8a12eb329697a5481c604e
3,a1ab0ff26f23c82f15180051204eeb6279747c9a
4,cc5a6d978144bda90220bd10866c4fd908d07546
5,84cfcaf98f3d19c8f0f316e22a61725ad201f0f6
6,bf9ab52860c1cbbeeca40df515468f42300ff429
7,25b4b85b887c643e337a9fbcd1b0220b413952bf
8,725badfb494544b7c7f1d4c4690b9bc033c6d051
9,76cae0ad05b6ba3e3e927b2b749ccddda23f0c51
10,1f9f3adf324af1432a380b41c7690834e649e346
11,482c26b536f8e5c998af6210470cd3d97a47ee9a
12,6cc1c1f0643ce0f1af0857e024a0a438ddb45853
13,18ac283a5d19c19f1e1a7020a50fe34c2160a0f8
14,ff8912c68e877744f8b15070e098af786e7bd296
15,72b841508f562c65b427a502fe6b270c3717319b
16,f5d480f139592cc2670c2b05076c39b2fd6fe9b3
17,1f3eb34f637520b01e6b8cd10a9026d05036db6d
18,5b142b1dcf6561df3c44a743965af3bd4e619112
19,3d8627719be00e39070eaca0ee5b599f2a877c5c
20,863e2b8de25fdf43a4a63b93d0f57718e9edaa47
21,a6bc4ab101c20b6398fd6bbfe124665bb7db5d25
22,b4e82cf7ce1cbfff8dd30f20fdad73fd3f1d5ccb
23,30a39926272a8341c52018654ca18d2c86ba662b
24,964b1d2a0e3e46882743f16703cb12b51e724179
25,6cb4220f339e7d2a894e44b61c90c576a482914b
26,aacc0cfec24e0aef1e884ac8b657e182a33a7b1c
27,8b6395d0f2be4024bd7e7921157a6496951eb162
28,3ce1b2d067164f754dcb4216c193dc98e164b3ce
29,648646bba704745274fcd4fef3b7029c7f7e0fcd
30,3e55cafef80f0fc9d74bb06ea174de4b53e2ef94
31,0b7663481d0513067e0c0af04765b8578ae2a498
32,a4d3223a7215712b86076fad8aaf179d8f768b14
33,be38d63d1b9cd236ef3ec884eedad8112bb6e6f9
34,4cedda2dbeca6bd81d2bd00032f7cff46e0a985e
35,35a0bcd366163168bf3337975130f62fc1c30235
36,ad7749f2fad87a4b1df644d4e1c345b3f87d386d
37,699d2b7e3f4ea4ba6ec2d5080f87e243989a5835
38,c2cc1d3c4500caa34da5e68eb62b7474caf96fe2
39,9dae23461eb6250865f4ee727a0e727a6a4e03ba
40,d9ea59757e2710e34f105e98230f30f578e0e662
41,7b8528f71c78a01e8ff41a76a83a320d1ef80e93
42,a0388bada4016bc0c3be6154c159faf80ce18d01
43,6c0a42926a10ea5abc781c9db89b105e007512b1
44,ca8b2434c97fc37c14eddcb3a4e831d030ebb041
45,cd832a311e56bda981c9c957ba45f1bc1f6cc737
46,6647ad9b843768968db0a331ff7077904c6f58ee
47,1c91d1943a8ee07034224dd950412c3c87ef3276
48,e6307ad374eeecd6474286b1b6fda5b3dda89d9a
49,f814033d04c4cefdbcf8174d65011d484d69303c
50,9443e4b8bc587b670f9b448b03842530cd355760
51,dfec1157b41bb86c8cb66eee0b0cbdb9dcccb6f4
52,e1e831ea3ee46ed7d4c975822f418d60d3050e1b
53,f0a018a7d6f5e3847d7e66e324c5f71a55c8b5ef
54,11e3841832697c8ba4a1d68f5daa05045f70a716
55,bef05432c9d3289636ed1d360ca9b863a0698dc7
56,5831edaab3eb6d56126c08f01f5639222602f7e5
57,43c2f0829f7d4ec3b96132b9964a778ff816b2eb
58,9d48eef58b964551350fe0c1f641a57f5da40529
59,a817b23da3c6f39f22bc57c0a53169978d97d7fa
60,74e3acc296d90d6d16ae70803196e967564fb16a
61,8c3503bb94bd6b2d57e1f979d9fc1d84383b2961
62,287906abb85081b961e118bb80b30decb93fba6f
63,f46370ef98adec5d3a840d69a6b34a03d80b0699
64,a6b82da1ae9eefa44dada0baa885c283823ad59a
65,67543ea113c5cc2b15881e2bbb85ffd44feaef1f
66,cb81a379d9f7aef32fb1bbebd18f8618e1617a3f
67,cfc4fa94c1eb17f37466571f74bbdfae03a6e11f
68,8b430a6c5fd6d33a637f2c615f8e5ec59e7be30e
69,9e211cbf1d459babf035fd6b3407c2bd184cb639
70,818352acc07d0a982076b4b49345b42be706f5e1
71,fdc80bc6b5faa058b88d838332c71b7101712896
72,44bba965cbe3827be2b68651e541b33fa040bb72
73,aa0accc75e9358d313fef0a6d4005103e2ce25f5
74,48ba2656fecc646ec4eb7f943fa94b02ed9725c7
75,736232f3d672dae9a1ddae800909204c17fbe37c
76,a4fea2ba3edeb8ab5a0812a09f14c2a771aa196c
77,01a94c04aa2b5a95ac4038bd0d6fd5334fcbf882
78,47f19371f75db9029ea1b8b3783624fb7838d2db
79,e8ca48cf41f5f3113cadfb23acfedad7b9fa2e63
80,7df934d2b63727d67d1c054975893930fa6aff44
81,6b88bcb306ef80b65d7f99c081ba83283b4ffac5
82,46a96d6862e4c1317ff48df69391fd98a1ae5e3d
83,daa739817c58baa8dcd0c23bb403d27d5907abfb
84,86440068b43d6f9c93fdb07c1c2279cbab579e73
85,f30f78175c1fd50c8cdd132ca804573ae0d18453
86,29ed294906ebc271c32a755e1aefc360df4d3863
87,79632219d0991aae83e1de3c56df7d664205c2b6
88,61a10551209a0d3770449862152e1b73b584d771
89,6116cae4c4b98ef9ed55736f3a6c1d872de97767
90,a4be55b333c9f712c334aac81e7ef4e076c2bc9b
91,b3047f2317b74f19fb44dfe5e577d586d93dfa3c
92,3c83dfd8af045ae6923d4ccb3a3a5a50f4012346
93,044d9ae07ba700c52d8342e4eee26e07eea11619
94,d0c0cb74b21f431c62f7eeb8dbc0d6e14c1eff14
95,447ee098c51f6f615ef560b35d429f32f0cb5a35
96,79f5de21eb706ea5486fd682a83ffbde7e4d16a9
97,22dd560ecf06e9ac4a4c1be33be74bac7924f06a
98,ae0a37dc4b39018a95616836ae4aaf4c8bfd779b
99,a754732c046939cd87ac9fc8e9483ae9b3369449
100,0d717373cc9e247fc6f6a0e02b0bbd424f0d70b0
101,5b955336032881edf835a50fb63f9581af1efd73
102,e9d2c46ab3cc8b8518df289a4fc24a9e3fc9b3fe
103,aca19dd35027a12e245bfa52e6a98968e0cd2a9c
104,483b194a80e904c11c5c6d855303596145adacee
105,bbfe3f4369e1dd2266b827c81d7d9078ab1d301f
106,eeb62b6dd547da5742f3ed74f8c8ae534d883dd9
107,1eae5ae3678d079efc7d2807f10439e53932f811
108,efa0f3366ddb914cc29f96fcdf10f99ded61775c
109,a58958ccb40a127a83e3383ef3887e4721352238
110,fde464c47cb69e030b58d8d204a508d6babd3e09
111,3d216e3e06eee7ea3679503867a619c28458e8a7
112,824543bb2f2b2e4f445d8c58b32f53bf1eec63ce
113,cd688a89b8a57e9614f278e29a9267709494d236
114,7a1f816783064a12156807fe0a4d760c2e212d4e
115,157356c769d777b1721da8218724608081137fe2
116,006a45ccd475296ee19ec87891523d89ce3f2f24
117,27647455e4cb7db1545a7b69c3a324aa025a471a
118,9df51789e7fd36fc1580bcd80676f9bcc4e24be1
119,310a87e15e98bb5abfd86ea7bb2a1cca1f5243c7
120,319772b42ebc2311a56ef54e1e9a60c5583971b1
121,127056dc1de6ddad280f6cf09cb15538dca22f43
122,30b3e216cd4eca3b8a13cb0a0613f053ac1d4925
123,eb85527656f77b9532f3a78cefde7a2eb739189e
124,ee252e6ce79d752526504cf034fd41f070191824
125,6a0ed71107670b404af04bc20a2461165483f390
126,dcd45792264795a32f19581a904dda8bf6d3ad06
127,58fc86137c23adc3d98be40117087c645a9d7e4e
128,754a24fafcea637cab8bc01bb2702069109a0358
129,197689a22b38df2ced90e03117914a2248238c20
130,3f59ce79554fcbccd15d42ff4b4ddb91812c7045
131,34ab83bdf49a23a47bc90354a5a4d22686d8d92a
132,aaf10459d93fb6c0f4539cb792c02a8d15cb0299
133,8b8f3de48bba31ccfa84e3573075b2125bc130c3
134,6880a39d2a5aec8e5ed32c276109936ed503d0bb
135,7ba6fe8d94af2a232a9da82b815502513f52e465
136,b77355427575385b6f0b6c0a914600b79b4e4412
137,93d12771d009924fb598b088dc4bd9b67fd9a09a
138,1fad2595d6fa67e57cd795d4faac4306e42e72c5
139,1e57f72d8adf15937856a3ca3ca0e16ccb37421e
140,29de46aed47e5308db9a0aef6e13610dea8fb389
141,cf9ceecb2f8cad2fb694b15c14ca1cf98e9524e7
142,83f76ebb66712a2560b2993e92265b574b1ab7ed
143,0ce109302715f8186b90671a53517a63a2741022
144,8ec1ebf176b88522fc4ec3980d20c78e13fdd526
145,c6b30568b407e7b60b6fc2929801669434e4f91a
146,8b14859f63a8389882bdb9330de592a112affa18
147,e452cf721511dbf0d7f8c8f469f2dd67d8a5ee93
148,ffea4219b1f4ebe7c06cecc6c221cb0aab3a03ea
149,9bf96124ba1e0cb95f491bd0c91d4e9c7a9850da
150,5d15431df1abab3a5cf596fabe0a77c030a10791
151,d06a8ac6e6120861c9c79acb15b9a18693e4ee47
152,c5953ba1328fa86f906406843eb9f23cd596ef04
153,53e81033ce18fd94fcdcde9010b7c9d41f30aa2c
154,f3d96136f292dea83fd760098d189a6884f59eb0
155,140b43358c33fb5e9f86789541dbca306bb64fcc
156,b833cd0f297ba7979c23cff1b88c27beb4f2f737
157,8b726b54893e11427533fcceb7206b97c25f50a6
158,1e1ea39dadd0035443f1d15c651deaf979341879
159,146c7b3dd47bb65da2da86cce7f4d75d8efa157d
160,d367510fcc1396fa252c4b87439c2f9fcd0abbe7
161,ec149f64d2f5c41a2080c0b4e42e4ef64444b382
162,d138864a2a99849e43d81ca071b7a799edc0e65a
163,bf6ff928ad17d98d07f68f619e6cbe29829d0a20
164,aa570f3086ce3e2c5ac8bf6107c051fed5aabf89
165,c6e81d22f8189cd7bfcfcc33e4ac462529418192
166,e7a1857a31fc0c0012773c021639a6297f5b208f
167,97d33ad3bdc21c26356253046902d4b166bd115b
168,9ad60e41d512158d942d1bf3808682ede6ef5118
169,2651448084a56dd0b960989798772e71e12e6c30
170,acce00228b842af35df5af8c97398765a386ab1e
171,1f80f581e517ae4a5df6ab38af48a0d2a1089c73
172,dec3b3fa02ffb343c37f82d36ae02be6bb30eb03
173,b9ad3e43cf7479712972514aa3f2c55a0f650f76
174,dd4306cdd8158f76f094fc699530311228536adb
175,c7d7ce0f0cbd5869259a3365211ab92126a27ff6
176,1313fc6d3a77cedbca18fa0ffee1a86d0903ad7f
177,8f6f7925a04ca070167a38b8952a1a0bb7b63d23
178,8f561aed9b7a47c38afd8c1cc75bc9a700ae97b5
179,769b5a0941694ccdcfe61528053c3d93cb53de80
180,5cb2f89e6a49cac8ddb16f46df92c31fa2507b9a
181,a8d76ad435891deee9deebbc3a825062fd6cd45a
182,8075582c21496530e3b1847f5bad11c42941066e
183,b33fe0ea828e6a8ff3ec2d8bd5845da2b337afa5
184,d85fc4ffcfb8875aa191481e5c153a1e07066f8e
185,a1dd6213c85dfa6f36f74fd00ade09ed9fa3e467
186,a939a7a90638631c296dfb63d857b24555b25327
187,e7fdc2e3f1d20d38ad61f6cb87e72c613b7696c7
188,5f5a8507ff2f2509c27ac1a196fd1874345e5e95
189,6f17071885b98ac5dcdcc0b233ff204150a6826c
190,dc01f94900a9cabf40bb6ec2c5be8b4665c30eda
191,ba6b4b63751ed65f2fcd74965d2b337a1a65752b
192,82ba010c764d3dc4d0f72a9ee5a6d6f72780e75f
193,ab4f1e1e197ecae40299b99dc00b1c92a4a3cb28
194,7746e4ee0b254da6311202c7db3d2fddd4c6a52c
195,7cbfd111d38b70110c9adcdfdae86d07995ae534
196,5322ea8495d70be81a6b80f7a88850b85bfba240
197,12a9e7506c092fcbab8852db85c3aebefc8a8c81
198,b29f0521025c95ff331ddb58258b1083f8efd9ff
199,9021f7f5decea3e7954f138e9bac4cfea26292be
200,5e0f8c47e3bd91f589710a28f09b718d4a0ec6f3
201,d63b1f410a7aa3d308d0620d640f417a87b0c838
202,c72df1c9be535bdfd5b46609996bf1eaf540aced
203,d7bad961146b9f2fd918f05fd59a50f3f65bf325
204,b6d3cd00df7d0496fca2af2c34e72ab3e6af4028
205,603de502fd8bad750d48aaf9a66c547e5ca04c2a
206,e0b5da3b395e46bbc2e377a59d5cba33206288a9
207,3f2c2d5bca4f4506e0ab0b03959d96be427fa672
208,fc69f5c6f9b3aeb5d6ee61353f0ed0df28f954c5
209,be8b6f6d31f0c73c2aabffdf2794f20c69567cdb
210,cc852fe99d0acfc6d547b36c75ff85e90975ad36
211,441a89b80babf98d3feb13e4594ee01eb6cc4dd5
212,54c2b3b18fb80235ad9ee53cac3966e8aad9e12a
213,17ea802ceaa76f55726488379959a983f891f631
214,c302a969d8217ab46113d494b8cd773cf057193d
215,2bdc6b800c1dbe6db584b91046785d4c48c41fb2
216,b1fdddff1523d2ca7bab4050434499d3a5ac39a1
217,2c91da54dff93a365feec5a34f8eaeccca3e3a70
218,5257ee0f202a5f9c4e5bcb576646cefe70f3ae91
219,9c36dd727c736dc3a3ffa6ce7ce473966d802068
220,c3075b3030c0488df1e7aa9f600da0f66072186b
221,e27417fcde500f6c01ce0dbee57a1af137510a09
222,0e77f3dff8b44547da4639c9609c216c9c896fa5
223,74bcec5b22a601451fac9d0878003d04205abca6
224,c31886aa7a52fd8639e09bbdf8ac8ea854c313f6
225,a57c661d46d9523bed01ad1b074f7a78d9e94ca3
226,454618cd15c2c87d9f5a6a6727e1b09a8e22a799
227,2dac3afece31c27bf773efbc1f30c6a67088d3b6
228,57b21fe90296c867888d7c8c60d243bc254a39d7
229,9cabe1f204a8a6139e8b072dfd6f0a15275ad25f
230,c467ee665de0c385170850ecc895add04b52b8a3
231,cae061af2b65ad0962fb4b6fe3b55abe2f3a5bf8
232,36230e0827ca33a9b09ea5aa7b06e170fd188ca1
233,6adba75af879d8ac2bc43a7337b02e64d10e60f1
234,e4491b811510d08f880d0f9c7553ecfd18635469
235,0e5d250ebfd29845c8c26b0ad63379994a2b8560
236,adb8b988897758d0d4f74dcd9129bff0831634ae
237,238277714ddc407f966f3c503e13a114d6a91630
238,2b2fa25507cdc491d2b5dafb2c4b5e33158b996a
239,c618c3b582de1d0b10b334a4f2ba6b85d5128940
240,835cd24b2c4598ee784d8bfd1c0427bfa948b947
241,691c4fac1529eaf1d825ca6093800912a4df3c91
242,67f5834378660abf271722a16294a634106d047e
243,31dc1dfa211ee27e74907ce3aa3986401dcedb82
244,95eb5b01b30b24d68cbeb3991f65c617fc2a35cb
245,37998be0c183508e54f10f57d63d87e6e7eb0607
246,c61c0d00252a8704ff2731f6a57bad3657b84170
247,aaf20fb96eaf21ead775fde6bad00d8e71650b5a
248,922604ae1e29fd1283fcc557e294a7272116c094
249,3a10c8aa44250e51dfe33e50b3121d6061faee4b
250,338144869fa82097d7767a032cbaac616ba0cd01
251,083c27559e5d8fce9c3b588fc4c01769ca9dd10d
252,74ec9f6f3964d4beaa3970bd99c8660f958b694e
253,007e526ec50bde4b366d0927ad20d9cd4ac53abf
254,7d80a5136d1b2926dd0776c51896c40723c518c5
255,1433b404d68f9fe314ae2955d0988dd74e5ecb92
256,1faab48ecf83d31a4fd781f10f6f00acb681d2dd
257,aee7891acb3e653dcfb10ec4172ae4d099ebf034
258,e28a612e9c2293182a83d5a7c6f48129455ce951
259,a2535163e232cd547b14960bf4232305d239741d
260,31087f8d4bbc06e5bec44cb14cab3a922b5e4855
261,e5f4ca90fd2bf950189c98ed7f1873c9f35131f3
262,6a2dc5a48a75b65aa2e3f606d195ef0fef3c4442
263,11fc259b01c4a855e53ffdb2b86c1030f9c18586
264,1b99badce48083c5fa6b8b5872e899c7d1a47f9a
265,85e46b1071b54649740b35df939f32ed188c0e13
266,6d344ed9459bd0328de53a58505a397d92cb0c8a
267,b3772845bd07fb695ca6b6e67ad7640776ae0f6c
268,8f5ff07dc08d258209adf60ed8e796efa7b7a476
269,ee0a951b30646023ccc9a144afb4b380bf8d09b1
270,4064871212049d82af3632941d15e6a0757ebc3c
271,77275c546a5340f94ad011cd759ef162bc714ba6
272,e8667afd08ecbf7c9b05beb4ff399959d9722ff9
273,07f901057f5c6aa77c0f15f7a22dc0b88923c227
274,2fa8f489f3a852bd5bb17e023fdc5ea3a606100d
275,b0109a30c9fa24fedcb4d79bb17788e7ed228636
276,bc2527944a83c1bc951a429530f39e93dc5235b2
277,c32f0e21e71f43e64a7b98c9d96d4c513d42ba37
278,8d130ab93f65f7ef79839aba87459e4f9507ba39
279,d56dd2f46e4049f017eae0dc99b2d16e78b88bee
280,e0bf168041ef60687b5d4454a93fc78c4f3acc48
281,d90c73b6058af4b22a4edd610713f75b2478e356
282,3d5550e29a92708613c3a351c0857aea90e147a5
283,4f165ec60baa74f244d0a7c9b64c4bb3cbb76173
284,f0c98e0d590ffae286a8a4847c91212c734be8e3
285,0aad326f3550b3d4c499d4078fcc65cc2dbf7626
286,30520e5a7c73a6613cfcef38d72058e7cccde1f4
287,655954e301621737988a4fa0a2c72ffc24285c8d
288,f6944133d211ec6fb71c41f118905e16a752135b
289,d0c4667b6bccf35ddf069c777689cd18c6a632b3
290,95d5a46234f98f3793c965bebe036361cbb1978e
291,57c1d4ec0290d49fa1e954ff3e7a51e24d71a3a1
292,db850f37a2a284bf18cea427e4676a22d83d04b8
293,fb5cfe5d17fd0c0cbc0d17789c065b9bb86ba3c4
294,7aa72e41e6b2703b3f357507252008ebe25dc08d
295,c3edffbbb06be9d586ee4f1cf678049b7d81369d

文本反转脚本

def reverse_file(input_file, output_file):
  """
  将输入文件的内容倒序输出到输出文件。

  Args:
    input_file: 输入文件的路径。
    output_file: 输出文件的路径。
  """

  with open(input_file, 'r') as f_in:
    lines = f_in.readlines()

  with open(output_file, 'w') as f_out:
    for line in reversed(lines):
      f_out.write(line)


if __name__ == '__main__':
  input_file = '1.txt'
  output_file = '2.txt'

  reverse_file(input_file, output_file)

  print(f'文本已成功倒序输出到 {output_file}')

文件移动脚本

import os
import shutil

# 遍历当前目录下的所有第一层子目录
for i in range(1, 296):  # 从001到295
    subdir_name = f"{i:03}"  # 格式化子目录名为三位数,例如001, 002, ..., 295
    subdir_path = os.path.join(os.getcwd(), subdir_name)  # 构造子目录的完整路径
    
    if os.path.exists(subdir_path) and os.path.isdir(subdir_path):
        # 遍历子目录下的所有目录和文件
        for item in os.listdir(subdir_path):
            item_path = os.path.join(subdir_path, item)  # 构造当前遍历项的完整路径
            
            if os.path.isdir(item_path) and item.startswith('chibicc-'):
                # 如果是以'chibicc-'开头的目录,则移动其内容到上一级目录,并删除该目录
                for subitem in os.listdir(item_path):
                    subitem_path = os.path.join(item_path, subitem)  # 构造子项的完整路径
                    dest_path = os.path.join(subdir_path, subitem)  # 构造目的地路径
                    
                    if os.path.exists(dest_path):
                        # 如果目标路径已存在,先删除
                        if os.path.isdir(dest_path):
                            shutil.rmtree(dest_path)
                        else:
                            os.remove(dest_path)
                    
                    shutil.move(subitem_path, subdir_path)  # 移动文件或目录
                    
                shutil.rmtree(item_path)  # 删除已经清空的chibicc-目录

chibicc的295个commits记录对应的代码压缩包

https://download.csdn.net/download/weixin_43172531/88856812

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值