C++入门路线:从环境搭建到内存管理避坑指南
C入门这四个字在外行眼里是兴趣的开始在行家眼里却是“劝退率最高”的起点之一。作为一门老牌语言C既要处理底层内存又要支持面向对象和泛型编程新手很容易在指针和编译错误里耗光耐心。但反过来看只要方向对了C又是性价比最高的一门语言——高性能后端、操作系统、游戏引擎、嵌入式设备它几乎无处不在。这篇文章的目标很明确给想真正走进C的新人一条可以照着走的路包括环境搭建、语法核心、内存理解、踩坑排查配合可直接运行的代码和实战经验让你少走弯路。适合刚上大一大二的学生、自学编程的转行者以及“看完了语法但不知道怎么下手写项目”的初级开发者。1. 入门之前先想清楚C到底在学什么1.1 这门语言为什么“难”难在哪三个地方C难不难难但难有难的道理。它的难度不来自语法繁琐而来自它的“三重身份”同时叠加。第一重它是一门过程式语言继承了C语言的遗产要求你理解内存、指针、数组退化的细节第二重它是一门面向对象语言类、继承、多态、虚函数概念一层套一层第三重它是一门泛型语言模板、元编程让初学者瞬间懵掉。更麻烦的是C没有把所有机制一次性摆在你面前而是把选择权交给你。你可以像写C一样写C也可以用现代C风格写。这个自由度本身对新手来说就是负担。你会在不同教材、不同代码里看到风格完全不一样的东西老派代码用裸指针、手动delete新代码用智能指针、容器和算法。两种都对但新手不知道哪种该学。我见过不少新人第一天就问“模板到底怎么理解”这本身不是坏问题但对于入门阶段的人来说答案只会带来更多困惑。入门期的重点应该是先把变量、函数、类、容器、引用这五样东西用熟让程序能正常跑起来模板、多态、lambda、移动语义属于进阶内容可以放到第二个月再去碰。先建立“能写能跑”的正反馈再慢慢往深处走这才是最稳的路径。1.2 别老盯着“最新标准”先从C11起步很多初学者喜欢一上来就学最新标准C17、C20甚至C23。我的建议相反先学C11。原因是C11是现代C的基石。它引入了auto、智能指针、lambda、范围for让代码可读性大幅提升。你工作中遇到的大部分老项目、主流教材、开源库至少都有C11的痕迹。等你把C11用顺了再去了解C14/17/20带来的新东西比如结构化绑定、if constexpr、概念都只是锦上添花。换句话说入门要的是“能看懂代码、能写代码”不是“能把所有关键字背下来”。所以这条学习路线的定位是以C11为基线顺带提一嘴更新特性里最实用的东西比如C17的std::optionalC20的范围for带初始化。但主线永远是基础。别被“不学最新就等于落后”的想法绑架基础不牢标准再新也是空中楼阁。2. 环境搭建把第一个程序跑起来2.1 编译器和IDE怎么选Windows/macOS/Linux各有说法这一节直接给结论。Windows上优先考虑Visual Studio Community装的时候勾选“使用C的桌面开发”工作负载它自带MSVC编译器和调试器图形界面友好断点调试对新手最友好。嫌它笨重也可以装VS Code配MinGW-w64但需要自己配置launch.json和tasks.json会额外消耗一些耐心。macOS上装Xcode Command Line Tools命令xcode-select --install然后配合VS Code使用。macOS自带clang编译器打开终端输入clang --version就能验证。Linux上用g最直接。Debian/Ubuntu系安装build-essentialFedora系用dnf groupinstall。新手不用纠结gcc还是clang选一个就用到底等有经验了再横向对比。提示不管在哪个平台入门阶段一定要先在命令行里把编译跑通哪怕后来全部用IDE也值得做这一件事。原因在2.3节专门讲。2.2 第一个C程序从创建到运行全流程先创建一个hello.cpp文件#include iostream int main() { std::cout Hello, C! std::endl; return 0; }在终端里进入文件所在目录执行g hello.cpp -o hello ./hello如果一切正常你会看到终端输出Hello, C!。这一步看起来简单但里面已经包含了C项目的完整生命周期源代码 → 编译器 → 可执行文件 → 运行。以后写再大的项目本质也是这个过程只是多了很多源文件和工具而已。新手可能会遇到两个常见问题。一是输入g报“command not found”证明编译器没装好二是中文乱码多数情况下是源码文件编码和终端编码不一致建议文件统一用UTF-8保存。这两个问题都在前面环境选择里提到过先配好环境再写代码能省下一堆麻烦。2.3 为什么我坚持让你先背下这条编译命令因为写C的程序员迟早要面对“编译、链接、运行”这套底层动作。IDE帮你隐藏了这些细节但一旦报错你还是要回到命令行看输出才能定位问题。我在带新人的时候经常发现一个现象有的人在IDE里点一下运行按钮就会跑但让他用命令行编译就懵了一报错就不知道哪一步出问题。命令行编译的最大价值是让你直观看到编译错误、链接错误、运行错误三个阶段分明。编译错误大多是你写错了语法链接错误通常是函数定义了却没找到入口或依赖库没加运行错误则发生在程序已经跑起来的阶段比如段错误、除零。这三个阶段分清楚排查问题就能少走一半弯路。IDE把这三类错误都混在一个窗口里新手反而容易看花眼。3. 语法基础用最快的速度建立整体框架3.1 变量、类型与运算符C的类型系统是静态的也就是说变量一旦声明了类型就不能随意改变。这和Python这类动态语言完全不同。定义变量的标准写法是int age 20; double score 87.5; char grade A; bool isPassed true;C11起建议用auto简化写法auto age 20; 类型会自动推导。但我不建议新手一上来就用auto至少在入门阶段要把类型写出来强迫自己知道每个变量的确切类型。auto是你已经理解类型之后拿来偷懒的工具不是让你跳过类型的借口。否则看到一段代码里全是auto你连变量到底是int还是double还是自定义类型都分不清排查问题会非常痛苦。运算符方面算术运算符、-、*、/、%比较运算符、!、、逻辑运算符、||、!以及自增自减、--这些跟其他语言差别不大。需要特别注意的是除法两个整数相除会直接截断小数部分比如7 / 2的结果是3不是3.5。新手很容易在这里踩坑想要浮点结果需要写成7.0 / 2或者static_cast (7) / 2。这个细节在写计算逻辑时很容易忽略一忽略就会得到让人摸不着头脑的错误结果。3.2 分支循环程序开始有“脑子”了条件和循环是所有程序的基本节奏。if-else、switch、for、while这四件套必须烂熟于心。for (int i 0; i 5; i) { if (i % 2 0) { std::cout i is even std::endl; } else { std::cout i is odd std::endl; } }有一个细节值得注意循环变量用int i还是size_t i。很多新手会在和vector的size比较时收到“有符号/无符号不匹配”的警告因为vec.size()返回的是无符号类型而int是有符号类型。两种类型比较时编译器会给出警告。虽然在小程序里结果往往正确但在边界条件下可能出问题。我建议在遍历容器时使用size_t或者直接用下面的范围for语法避免这层隐患。3.3 函数把代码拆成可复用的积木函数在C里是组织代码的基本单元。定义、声明、调用、参数、返回值这些都要熟练掌握。int add(int a, int b) { return a b; } int main() { int result add(3, 4); std::cout result std::endl; return 0; }参数传递方式入门阶段最需要区分三点值传递、引用传递、指针传递。值传递会复制一份函数内改不动外面引用传递用符号可以直接修改实参指针传递本质也是传值但传的是地址。刚入门时我建议先把值传递用熟然后重点理解引用传递因为后面学拷贝构造函数、移动语义时引用无处不在。函数还有一个容易混淆的概念——声明与定义。声明告诉编译器“有这个函数”比如int add(int a, int b);定义则是写出函数体。如果你只调用了一个声明过的函数却没有在任何地方定义它编译器会报“无法解析的外部符号”这就是链接错误。很多新手第一次遇到这个报错完全摸不着头脑其实就是这么回事。3.4 数组、字符串和vector容器C里有原生数组int arr[5]也有更安全的std::array还有最常用的动态数组std::vector。入门阶段建议尽量用vector因为它自动管理内存还能方便地添加元素std::vectorint nums {1, 2, 3}; nums.push_back(4); for (auto n : nums) { std::cout n ; } std::cout size: nums.size() std::endl;字符串方面用std::string而不是C风格字符数组。std::string支持拼接、length()、find()对新手友好得多。很多人学过C语言习惯用char数组处理字符串到了C一定要主动改掉这个习惯。std::string底层替你管理内存你在前面内存管理那一节就知道这能省多少事。3.5 类和对象你的第一个抽象工具类是C面向对象的起点。一个简单的类长这样class Student { public: Student(std::string name, int age) : name_(name), age_(age) {} void introduce() const { std::cout Name: name_ , Age: age_ std::endl; } private: std::string name_; int age_; };这段代码里包含了好几个重要知识点构造函数、初始化列表、const成员函数、私有成员变量。很多新手一开始搞不懂private和public的意义我用一个生活类比解释。把类想象成一间酒店客房public的东西是走廊和前台的公共区域客人可以自由进出private的东西是房间内的保险柜只有持有合适权限的人才能操作。用private把内部数据保护起来只暴露必要的接口这就是封装的意义。构造函数负责创建对象时初始化成员变量析构函数负责对象销毁时的清理。新手经常忘记初始化列表的用法直接写在函数体里赋值也能工作但效率略低而且对const成员变量就无能为力了。尽早养成用初始化列表的习惯对以后有好处。3.6 引用、指针和const绕不过去的三兄弟这是C初学者最头疼的部分。我先说一句让很多人安心的话你学不会指针不是因为笨而是因为教材往往把它抽象化、神化了。指针本质上就是一个整数只不过这个整数存的是内存地址。取地址符能得到变量的地址int value 42; int* ptr value; std::cout *ptr std::endl; // 解引用输出42引用则是另一个变量的别名。引用一旦绑定就不能再指向其他对象。你可以这样记指针是“我记住你家地址”引用是“你就是我兄弟我直接住你家”。指针可以修改指向引用不行。这个区别会在函数重载、拷贝控制等场景反复出现值得反复揣摩。const这个修饰符也很重要。const int表示常量不可修改const int表示指针指向的值不可改intconst表示指针本身不可改。新手可以先从最简单的“const修饰变量”开始理解后面遇到函数参数加const、成员函数加const再慢慢体会。一句话总结const是C给代码加的那层“只读保护”用好它很多bug在设计阶段就被挡住了。4. 内存管理C和其他语言的真正分水岭4.1 栈、堆和“谁来清理”的问题为什么C要专门聊内存因为它在运行时不帮你自动回收。这是C难以真正“上手”的核心原因之一。栈内存由编译器自动分配和释放适合小对象、短生命周期。堆内存通过new分配、通过delete释放适合动态大小、长生命周期的数据但你要自己负责清理。int* arr new int[100]; // 用完后必须释放 delete[] arr;如果new了却不delete程序运行期间会一直占着内存这就是泄漏。别小看这个问题服务端程序跑久了内存持续上涨最后被操作系统用OOM机制杀掉大部分就是这类问题积累出来的。所以C程序员对new/delete始终要保持警觉。4.2 RAII把资源绑定到生命周期C社区有一个核心技巧叫RAIIResource Acquisition Is Initialization中文常译作“资源获取即初始化”。理解它最好的方式是看一个标准库例子std::vector的内部就动态管理一块堆内存但你不需要手动释放它。因为vector的析构函数会自动释放当函数结束、对象离开作用域时析构函数必然被调用。这个思想贯穿整个C标准库。文件流std::fstream、互斥锁std::lock_guard、智能指针都是RAII的体现。换句话说把资源的获取放在构造函数里把资源的释放在析构函数里让对象的生命周期替你去管理资源。新手一开始不用强求完全掌握这个理念但要知道它的存在因为它是理解现代C编码风格的钥匙。4.3 智能指针现代C的救星C11引入了三种智能指针unique_ptr、shared_ptr、weak_ptr。unique_ptr意味着同一时间只有一个人拥有资源所有权唯一不能拷贝只能移动。shared_ptr允许多个所有者共享内部采用引用计数最后一个持有者释放资源。weak_ptr解决shared_ptr循环引用的问题而存在。新手入门可以先只学unique_ptrstd::unique_ptrint p std::make_uniqueint(100);你不需要手动delete因为unique_ptr离开作用域时会自动释放。这个写法的威力要在你写链表或二叉树这类复杂数据结构时才能真正体会到。现阶段知道有这几个工具就行别陷得太深学到指针和内存之后再回头补最合适。5. 编译链接原理和标准库速览5.1 编译过程到底发生了什么把hello.cpp变成可执行文件中间经历了四个阶段预处理、编译、汇编、链接。预处理处理#include和#define编译把C代码转成汇编汇编把汇编转成机器码目标文件链接把多个目标文件和你调用的库合并成一个可执行文件。新手遇到最多的是“编译错误”和“链接错误”。区别很简单编译错误发生在单个源文件内部通常是语法问题报错会告诉你具体哪一行哪个符号有问题链接错误发生在多个文件之间最常见的场景是——你声明了一个函数但没定义或者定义了却没有把对应的源文件参与编译。遇到链接错误时先检查是不是所有.cpp文件都加进了编译命令。5.2 几个必须会的标准库组件入门阶段先记住四个。std::string处理字符串拼接、查找、截断都有现成接口std::vector动态数组push_back添加元素、size取长度、[]按下标访问std::map关联容器类似字典通过键找值std::algorithm提供sort、find、max等算法配合迭代器使用。std::mapstd::string, int scores; scores[Alice] 90; scores[Bob] 85; std::cout scores[Alice] std::endl;先学会看文档推荐的查询网站是cppreference。遇到不会的接口学会怎么查函数签名比死记硬背更高效。我自己的习惯是先看示例代码再回看函数参数说明这样记忆更深刻。6. 常见错误与排查实录6.1 编译报错速查表下面这张表覆盖了新手最常见的几类编译错误先收藏遇到问题回来对照。现象原因对策xxx was not declared变量或函数没定义或头文件没包含检查定义位置和#include无法解析的外部符号链接错误函数只有声明没有实现检查源文件是否参与编译表达式必须为可修改的左值给常量或临时值赋值检查const修饰确认赋值对象数组下标越界访问了不存在的元素检查下标边界优先用at()段错误访问非法内存检查空指针、野指针、越界未定义的引用有声明但缺少定义或没链接库检查函数实现和编译命令6.2 调试方法从print到断点的正确姿势入门初期最有效的调试方式就是打印。用std::cout输出关键变量从输出里判断执行逻辑有没有走到预期分支。比如写一个排序函数每轮交换后打印一下数组内容很快就能看出哪一步出了问题。打印调试虽然土但对新手理解程序执行流程非常有帮助。等打印debug已经不太够用了再学IDE断点调试。在开发环境里F9设置断点F5启动调试F10单步执行F11进入函数。观察窗口能看当前变量值调用堆栈能看函数调用链条。这套操作值得花半小时刻意练习一次以后排查复杂问题能省太多时间。我见过太多人只会用print遇到大型项目时根本定位不到崩溃点这时候断点调试就是另外一个维度的手段。6.3 新手的五个经典深坑第一个坑是未初始化的变量。局部变量如果不主动初始化值是不确定的随机数。写int count;就当成0来用结果可能时对时错特别难排查。第二个坑是数组越界。vector用at()访问越界会抛出异常用[]则不会检查所以不要依赖[]的越界行为。第三个坑是悬空指针。指向的内存已经被释放指针仍保留着原地址再访问就是未定义行为程序可能崩溃也可能正常全看运气。第四个坑是反复拷贝大对象。比如把整个vector按值传进函数每次调用都复制一份性能会肉眼可见地下降。第五个坑是在循环里拼接string应该用代替反复能减少大量临时对象的创建。7. 入门之后往哪走7.1 用三个小项目检验你的水平第一个写一个学生成绩管理系统。不要求界面文本输入输出即可用到类或结构体、vector、map、排序算法。第二个写一个命令行贪吃蛇。用到二维数组、输入处理、简单游戏循环。第三个写一个文件单词统计器。读取文本文件统计每个单词出现次数按频率排序输出。这三个项目覆盖了数据结构基础、逻辑控制、文件操作做完基本就算入行了。做完一个项目再看下一步学什么才有方向。遇到不会的语法先Google再查参考文档把每个问题记录成自己的笔记。很多人学完语法不知道能干什么问题就出在缺少项目驱动变成“看会了”而不是“做会了”。7.2 我给新人的几点真心话学C最大的陷阱是“只学不写”。看一百遍语法书不如亲手写出一个能跑通的程序。遇到报错不要慌错误信息就是给你指路的灯。还有一点不要上来就啃大部头经典开局先找轻量教程跑通全流程建立正反馈。等有感觉了再回头翻厚书那时候你才看得进去。我在实际带人的过程中发现能坚持下来的人都有两个共同点一是能接受“长时间做不出来一个完美程序”的状态二是不把编译报错当成失败而是当成一次信息收集。C入门本质上是一门“用手思考”的学问它对新手不友好恰恰是因为它要求你真正理解计算机发生了什么。一旦跨过这个门槛后面再学其他语言你会发现很多概念都是相通的。这套方法我已经看着不少零基础的人验证过剩下的就看你能不能坚持前两个月了。

相关新闻

3节点Hadoop+HBase分布式集群搭建实战与避坑指南

3节点Hadoop+HBase分布式集群搭建实战与避坑指南

1. 为什么今天还要亲手搭一套Hadoop加HBase先把结论摆在前面:如果你只是想跑个WordCount或者存几张测试表,用单机伪分布式五分钟就能糊弄过去。但只要你碰的是真实业务量级的数据——比如每天几千万条日志、需要按行键做毫秒级随机读写、还要保证节点挂了…

2026/10/19 4:14:37 阅读更多 →
Oracle expdp异地导出:核心机制、方案选型与避坑指南

Oracle expdp异地导出:核心机制、方案选型与避坑指南

做过Oracle数据库迁移的朋友,基本都碰到过这类需求:业务库在A机房,灾备库或报表库在B机房,甚至云上测试环境需要一份生产数据。大家第一反应往往是“远程敲一条expdp命令,直接把数据导到另一台机器上”。这个想法听着很…

2026/10/19 4:14:37 阅读更多 →
Oracle expdp异地导出全攻略:从参数配置到避坑指南

Oracle expdp异地导出全攻略:从参数配置到避坑指南

做数据库运维的人,基本都接过这种需求:生产库在A机房,分析平台或者灾备环境在B机房,业务方丢过来一句话,“把这几套核心业务schema的数据导到那边去”,然后留下一堆待办就消失了。这种工作落到执行层&#…

2026/10/19 4:14:37 阅读更多 →

最新新闻

室内AI出图三周实战路线:从零基础到稳定交付效果图

室内AI出图三周实战路线:从零基础到稳定交付效果图

刚收到一位做室内设计的同行私信,开口就问:“室内AI出图要学多久?我看别人发的那种效果图太惊艳了,但自己连从哪下手都不知道。”我的回答很直接:三周,足够你从完全没碰过AI出图,到稳定输出客户…

2026/10/19 4:49:02 阅读更多 →
深度学习过拟合问题详解:Dropout、正则化与早停法实战指南

深度学习过拟合问题详解:Dropout、正则化与早停法实战指南

深度学习里有个特别常见的现象:训练集上的loss一路走低,看起来模型要成神了,结果验证集上的表现先是不动,然后掉头向上,甚至越跑越差。很多初学者第一次遇到这种情况时都会怀疑是自己代码写错了,其实不是&a…

2026/10/19 4:49:02 阅读更多 →
校园快递管理系统毕业设计:从数据库建模到SpringBoot+Vue全流程实战

校园快递管理系统毕业设计:从数据库建模到SpringBoot+Vue全流程实战

做了这么多年开发带毕业设计,我越来越觉得快递管理这类系统是被低估的选题。乍一听有点"烂大街",但真落地起来,它把权限控制、状态流转、二维码生成、消息通知、数据统计这些日常业务里绕不开的场景全串起来了,很适合用…

2026/10/19 4:49:02 阅读更多 →
大模型选型评测:MiniMax2.1、GLM-4.7、Qwen3-Coder、Doubao-Seed场景对比

大模型选型评测:MiniMax2.1、GLM-4.7、Qwen3-Coder、Doubao-Seed场景对比

直接上结论:现在大模型的竞争早就不是“谁参数多谁赢”的蛮力阶段了,而是进入了“精细化分工”的成熟期。我最近密集测试了MiniMax2.1、GLM-4.7、Qwen3-Coder、Doubao-Seed这四款各有来头的模型,感慨挺多的:它们都不是“全能的六边…

2026/10/19 4:49:02 阅读更多 →
从代码到实物:程序生成图案的激光切割与实体制作指南

从代码到实物:程序生成图案的激光切割与实体制作指南

做手作和写代码,这两件事在我这儿一直不太分家。前几年折腾过不少生成艺术的小项目,每次想从屏幕里的图案变成现实里能挂上墙、能拼装、能送人的实物,都要在绘图软件、脚本、激光切割参数、纸张克重之间来回倒腾,烦得不行。后来我…

2026/10/19 4:49:02 阅读更多 →
CentOS下BIND域名解析配置实战:从正向/反向解析到故障排查

CentOS下BIND域名解析配置实战:从正向/反向解析到故障排查

1. 项目概述:CentOS下的域名解析配置到底要做什么第五个年头做Linux运维,最常见的需求之一就是“帮我把域名解析配置上”。这句话在上线部署、内网服务联调、测试环境搭建里反复出现。尤其是新买了一台CentOS服务器,业务程序部署完了&#xf…

2026/10/19 4:48:02 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →