# c-daily-template **Repository Path**: dark-dan/c-daily-template ## Basic Information - **Project Name**: c-daily-template - **Description**: 每日模板 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-28 - **Last Updated**: 2026-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: 模板 ## README # C 语言每日练习工具包 > 一题一个 `.c` 文件的练习模板,外加两份本机开发环境速查文档。 > 用 VS 2026 + w64devkit(GCC) 在 Windows 上写 C 的顺手配置。 ## 这个仓库解决什么问题 一个 `.c` 文件里只能有一个 `main()`。如果一天只写一个 `test.c`,练完第 1 题想练第 2 题, 就必须把第 1 题的 `main` 注释掉,否则链接器报 `multiple definition of 'main'`。 于是文件会越写越长:上百行里只有二十行是活的,其余全是注释掉的旧版本。 这个模板换个做法:**一个目录放很多个 `.c`,每个 `.c` 一个 `main`,各自编译成各自的 `.exe`**。 旧版本不用注释掉,它就是一个还能跑的文件。 ## 目录内容 | 文件 | 作用 | |---|---| | `Makefile` | 一题一个 exe 的构建规则:`make` / `make strict` / `make list` / `make clean` | | `build-all.ps1` | 同上,只需要 PowerShell,不用装 make;支持 `-Strict` 和 `-Run` | | `NOTES.md` | 每日练习笔记骨架(学到的 / 卡住的 / 想通的) | | `p01_hello.c` | 示例 1:最小可运行程序,兼模板使用说明 | | `p02_bitcount_mod.c` | 示例 2:popcount 版本 1(**故意保留缺陷**,负数算错) | | `p03_bitcount_kernighan.c` | 示例 2 的版本 2(正确写法)——演示「同一问题第 2 版另开文件」 | | `模板说明.md` | 模板的完整用法:四条规则、FAQ、为什么这么设计 | | `快捷指令.txt` | VS 2026 中文不乱码速查 + 编码/换行排查命令 | | `Git上传-快捷指令.txt` | Git 提交 / 上传 / 换行诊断速查 | ## 三分钟上手 ```powershell # 1. 复制成新的一天 Copy-Item -Recurse . "2026_11_Nov\test_11_05" # 2. 删掉示例题,写今天的 Remove-Item "2026_11_Nov\test_11_05\p0*.c" # 3. 每题新建一个 .c,每个都自带 main(),文件名 pNN_主题.c # 4. 编译 cd "2026_11_Nov\test_11_05" make strict # 把告警当错误(提交前跑一次) make # 编译全部 make p01_prime.exe # 只编一个 .\build-all.ps1 # 没装 make 时用这个 ``` ## 三条硬规则 1. **一个 `.c` 只能有一个 `main()`** —— 所以不能把所有题编成一个程序。 2. **写第 2 版就新建文件,不要注释掉第 1 版** —— `p02` 和 `p03` 就是演示,两版都活着,随时能对比跑。 3. **程序输出用英文,注释用中文** —— 中文输出要同时摆平源文件编码、编译参数、控制台代码页三件事, ASCII 输出让这一整类问题直接消失。注释不参与运行,随便写。 ## 编码与换行约定 | 文件 | 编码 | 换行 | |---|---|---| | `.c` / `.h` | UTF-8 **带 BOM**(MSVC 靠 BOM 认中文) | CRLF | | `.ps1` | UTF-8 **带 BOM**(PowerShell 5.1 不带 BOM 会按 GBK 读) | CRLF | | `Makefile` | UTF-8 **不带 BOM** | CRLF,且规则行必须用 **Tab** | | `.md` / `.txt` | UTF-8 不带 BOM | LF(`.txt` 这里用 CRLF 方便记事本) | > 本仓库是**公开模板**,所有本机绝对路径已用 `<...>` 占位符脱敏 > (例如 `D:\<仓库根目录>\test.c`、`C:\Users\<用户名>`)。 > 直接复制命令前,先把占位符换成你自己的路径。 ## 相关 - 完整用法与 FAQ:[模板说明.md](模板说明.md) - 编码 / 乱码排查:[快捷指令.txt](快捷指令.txt) - Git 提交与上传:[Git上传-快捷指令.txt](Git上传-快捷指令.txt) ## 许可 MIT