news 2026/10/3 1:29:43

VS2019安装避坑全攻略:组件勾选、字符集与卸载清理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
VS2019安装避坑全攻略:组件勾选、字符集与卸载清理

简介:VS2019 是众多开发者常用的集成开发环境,不过零基础用户在安装和初始配置时往往容易踩坑。这份 PDF 文档共 1 个文件、约 1.2MB,以超详细图文形式,从官网下载社区版安装包讲起,覆盖自定义安装位置、语言包可选简体中文或繁体、创建第一个空项目、右击源文件添加新建项时务必保留 .cpp 后缀,以及编译运行前选择 x86 平台等完整过程。针对安装后遭遇的典型报错,文档给出了具体排错思路:不支持 C++ 万能头文件时可改用标准头文件;scanf 等不安全函数报错时可换成 scanf_s,或添加宏定义绕过警告;SDL 安全检查造成干扰时,可在项目属性中将 SDL 检查设为“否”;还可解除 C++ 对 C 头文件的绑定以加快编译。最后特别提醒,删除 VS 必须彻底,否则重装易遇到残留问题。目前已有 4386 人学习下载,很适合刚接触 VS2019 的学生和开发者作为快速上手的参考手册。

1. VS2019 安装:为什么一上来就要避坑组件与字符集

VS2019 安装,听起来是双击下一步的事,真正动手的环节里,十个有六个人会卡在组件勾选、字符集、卸载残留这三处。这篇笔记把我自己安装、重装、清理残留的过程完整走了一遍:社区版从哪里拿、工作负载怎么勾、创建空项目时后缀为什么不能改、scanf 报错怎么压下去、卸载不彻底会埋什么雷,全部对着实际操作来写。适合三类人:学校课程指定 VS2019 的在校生、公司还在维护老解决方案的开发者、以及为了 Qt 开发必须配 MSVC 2019 工具链的初学者。下面按安装顺序推进,照着点就行。

2. 下载与安装器:社区版、工作负载勾选与离线包生成

2.1 社区版与产品密钥:免费版够用,别去搜破解

VS2019 分为社区版、专业版、企业版三个梯队,个人开发者、学生、开源项目作者用社区版完全合法且免费。社区版不限制代码量,不开源商用项目也照样能跑,不需要输入任何产品密钥,启动界面里也不会出现“未激活”之类的状态。想在搜索引擎里找“vs2019 产品密钥”的人,多半是被旧教程带了节奏,实际下载时选 Community 按钮就够了。

下载完成后得到的不是完整的 IDE,而是一个 vs_community.exe 引导程序。这个引导程序本身只有几 MB,真正的工作负载、SDK、工具链都要在联网状态下从微软服务器拉取。换句话说,网络不好的人第一步就会卡在“下载中”界面。这时候别急着反复重开安装器,先确认内网能连通外网,或者直接跳到最后第 6 章用命令行方式生成离线包。

安装器的首页会列出工作负载、单个组件和语言包三栏,语言包默认只有英文。勾选界面下方会实时显示“估算磁盘空间”,完全没概念的人直接照这个数字准备 C 盘空间。如果你只需要写 C/C++,别去碰“通用 Windows 平台开发”“Office 开发”这类工作负载,它们会把 Windows SDK、UWP 工具链一股脑塞进磁盘,装完才发现占了 20 多 GB,卸载又要折腾一遍。

2.2 工作负载怎么勾:按语言选,别照单全收

主界面里第一屏是“工作负载”,这里的选择直接决定后面编译器的可用性。写 C 或 C++ 代码,勾选“使用 C++ 的桌面开发”这一项就够了,它会自动带上 MSVC v142 编译器、Windows 10 SDK、C++ CMake 工具和测试工具链。d甚至是后面配 Qt 时,Qt 官方安装包要求的“MSVC 2019 64-bit”编译器也包含在这个工作负载里,不需要额外装其他 VS 扩展。

单个组件那一栏不用动,系统已经跟随工作负载把核心项选好了。如果非要自己点,最容易误操作的是把同一个组件的高版本和低版本同时勾上,比如 Windows 10 SDK 装两个版本,以后打开别人项目时会疯狂提示目标框架版本不匹配。语言包这栏我习惯只勾简体中文,VS2019 的多语言包可以后续在安装器里追加,一次装太多只会拖慢首次启动和更新下载速度。英文界面虽然看着陌生,但搜索报错时好处很明显,建议有能力的人顺手把英语也勾上。

磁盘空间方面,纯 C++ 桌面开发大概需要 5 到 8 GB,这还不包括后续 NuGet 包和 vcpkg 下载的第三方库。组件估算界面下方有“下载大小”和“安装大小”两行数据,后者才是实际的磁盘占用,前者的下载完成后会解压并缩放,别拿下载大小来衡量磁盘余量。

2.3 安装位置与缓存:为什么建议默认 C 盘

安装位置默认在 C 盘,很多人一看系统盘变红就想改到 D 盘。我的建议是:除非 C 盘只剩个位数 GB,否则保持默认。VS2019 的安装目录、Windows SDK、MSBuild 目标和 Visual Studio Installer 的缓存包之间存在路径联动,改到其他盘不是不行,但后续新增组件、修复安装、跨版本共存时,安装器偶尔会找不到既有路径,表现就是“无法修改安装”或“找不到指定组件”。

如果确实要改,安装器界面里“Visual Studio 2019”下方有“安装位置”页签,可以分别改“安装位置”和“下载缓存位置”。注意下载缓存对应的目录是C:\ProgramData\Microsoft\VisualStudio\Packages或你在安装器里指定的位置,它存放所有已下载的组件包。把安装位置移到 D 盘后,缓存目录尽量保留在 C 盘,原因是 Windows SDK 安装过程中部分脚本仍会引用 ProgramData 目录,改动它反而更容易触发权限问题。

点击右下角“下载安装”之后,安装过程会持续 20 到 60 分钟,视网络质量而定。中途取消再续传是允许的,但不要直接杀进程,否则安装缓存目录里会留下大量半成品文件,体积可能超过 10 GB。安装完成后建议先重启一次系统再启动 VS,之前遇到过不重启直接打开 IDE 导致“评估许可证过期”的假报错,其实是安装器还没把环境变量刷进当前会话。

2.4 离线包:官网入口缺失时的备选方案

现在访问官网找 VS2019 下载入口,会发现首页已经变成了 VS2022,旧版本的安装引导程序不再直接展示。搜“vs2019 离线安装包”的人越来越多,就是因为官网入口变浅,或者内网环境下载太慢。其实微软仍然保留了通过命令行生成离线包的能力,只需要找到一个有效版本的 vs_community.exe 引导程序即可。

vs_community.exe --layout D:\vs2019_offline --lang zh-CN --add Microsoft.VisualStudio.Workload.NativeDesktop

--layout指定离线包的输出目录,生成后的目录里有完整的安装器和组件包;--lang zh-CN表示只下载简体中文语言包,想保留英文调试信息可以写成zh-CN en-US;--add指定工作负载,这里只拉取 C++ 桌面开发,体积比完整版小很多。执行命令后,程序会开始下载全部依赖,下载完成的目录可以整个拷贝到离线机器上,双击目录里的 vs_community.exe 即可安装,不需要联网。

如果下载中断,重新执行相同的命令会继续断点续传。多台同配置机器复用同一个离线包是常见做法,但每台机器安装后仍需要执行在线更新,否则组件版本会冻结在离线包生成的时间点。另外,离线包安装完成后,D:\vs2019_offline这个目录就可以删除了,它不是运行依赖,留着只会继续占用磁盘。

3. 创建第一个 C++ 项目:空项目、源文件与 x86 调试平台

3.1 新建空项目:为什么不用控制台应用模板

启动 VS2019 后,起始页选择“创建新项目”,项目模板里既有“控制台应用”,也有“空项目”。控制台应用模板会自动生成一个包含main函数的.cpp文件,看起来省事,但它预置的代码结构对初学者并不友好,比如默认带stdafx预编译头的旧模板会把问题复杂化。我更推荐选“空项目”,所有细节都从零开始搭,每一行代码的来历都清楚。

空项目创建完成后,解决方案资源管理器里会看到一个解决方案(.sln文件)和一个项目(.vcxproj文件)。一个解决方案可以装多个项目,一个项目通常对应一个可执行程序或静态库。初学阶段一个解决方案里只有一个项目就够了,不需要为它们的关系费神。解决方案是容器,项目是实际编译单元,编译按钮针对的是当前项目,不是整个解决方案。

创建时右下角有一个“创建新项目”的按钮,点了之后可能弹出“不可用”提示,多半是 SDK 版本没有选对。模板列表里选择“空项目”后,会在下方“配置”里看到 Debug 和 Release 两个默认配置,这是 VS 自带的构建配置,Debug 关闭优化便于调试,Release 开启优化适合发布,现在选 Debug 就行。

3.2 添加源文件:右击源文件,新建项的后缀不能乱改

空项目创建后,解决方案里的“源文件”文件夹是空的。右击源文件 → 添加 → 新建项,在弹出的对话框里选择“C++ 文件(.cpp)”,文件名可以叫main.cpp或随便什么名字。原文里特别强调“后缀 .cpp 不要修改掉”,这一点值得展开:VS 依靠扩展名来决定调用哪种编译器,.c后缀会走 C 编译器,.cpp后缀才走 C++ 编译器和 C++ 标准库。

如果把文件后缀改成.txt或.cc,文件会被识别为普通文本或非常规源码,直接排除出编译列表,F5 运行时提示“无法启动程序”或“找不到入口点”。新建项对话框右下角的“名称”和“位置”两个字段,位置保持项目目录默认值即可,名称末尾手动敲上.cpp,VS 一般会自动补全,但手动敲更保险。

添加完成后,解决方案资源管理器里的main.cpp会出现在源文件节点下。双击打开就能写代码。此时工程还没有可执行入口,编译会报LNK2019 无法解析的外部符号 _main,等代码写完就不会有这个错。整个过程我只推荐在“源文件”节点下新建,不要在“头文件”节点下新建.cpp,那样虽然文件还在,但项目结构会乱,后面同步文件列表时会多费一轮功夫。

3.3 第一行 C++ 代码与编译运行流程

#include <iostream> using namespace std; int main() { cout << "Hello, VS2019" << endl; return 0; }

#include <iostream>是输入输出流标准头,using namespace std让cout、endl不必写std::前缀。main是整个程序的入口,操作系统启动进程后从它开始执行。cout << ... << endl负责在控制台输出一行文本并换行,return 0表示程序正常结束。

写完代码后,菜单栏“调试”里有两个常用菜单项:开始调试(快捷键 F5)和开始执行(不调试)(快捷键 Ctrl+F5)。初学者常常分不清二者区别:F5 会启动调试器,程序运行到断点会暂停,适合查逻辑错误;Ctrl+F5 直接运行程序,控制台窗口停留,适合看输出结果。第一次运行建议用 Ctrl+F5,能直接看到Hello, VS2019的结果。

如果编译时提示“无法打开文件 main.cpp”,先检查文件是否真的在项目目录里,常见做法是把文件拖进 VS 时只是打开了副本而不是加入项目。正确方式是右击“源文件”添加现有项,或者从资源管理器拖动文件到源文件节点下,让 VS 识别为项目成员。看到底部“输出”窗口出现“已成功生成”的同时显示“0 个错误、0 个警告”,就可以运行了。

3.4 x86 还是 x64:初学者为什么先选 x86

工具栏中部有一个“解决方案平台”下拉框,常见选项是 x86、x64、Win32。原文要求选 x86,原因在于 32 位程序在 64 位 Windows 上兼容性最好,几乎所有第三方库都提供 32 位版本,而 64 位库偶尔会遇到“LNK1112: 模块计算机类型 x86 与目标计算机类型 x64 冲突”这类错误。课程作业、算法题、小型桌面工具用 x86 完全够用,不存在性能瓶颈。

切换到 x86 的方式很简单:单击工具栏“解决方案平台”下拉框,选择“x86”或“新建”,在里面创建一个名为 x86 的解决方案平台。VS2019 部分版本默认显示的是 x64,需要手动添加 x86 平台。切换到 x86 后,输出窗口里编译命令行会多出/MACHINE:X86参数,这是链接器指定目标架构的标志。

如果以后做图像处理、数值计算或需要大内存的工程,再切到 x64 不迟。x64 平台的程序运行时要求 CPU 支持 64 位指令集,现在市面上的机器基本都满足,但实验室老旧机器未必。初学阶段不涉及两种架构的性能差异,优先保证程序能跑才是正道。Debug 模式下 x86 和 x64 的编译速度差别几乎感知不到,真正拉开差距的是 Release 长期运行的大型软件。

4. 编译与运行排查:万能头、scanf、字符集的五个踩坑现场

4.1 万能头bits/stdc++.h编译失败

很多从 OJ 平台转到 VS2019 的人,习惯把#include <bits/stdc++.h>直接粘贴进来,编译后立刻报错:fatal error C1083: 无法打开包括文件: "bits/stdc++.h": No such file or directory。

原因是<bits/stdc++.h>是 GCC/Clang 工具链自带的非标准头文件,它把所有标准库一次性包含进来,OJ 系统用 Linux 加 GCC,能编译通过。微软的 MSVC 编译器并不提供这个头,它属于 GCC 内部实现,不属于 C++ 标准。让我把问题解释得更直白:这不是 VS 配置问题,是这个头根本不存在。

解决方法是换成标准头文件组合。写算法题一般只需要:<iostream>(输入输出)、<vector>(动态数组)、<algorithm>(排序查找)、<string>(字符串)。哪些头文件对应哪些容器,直接决定你 include 的范围,装不下全部。问题在于代码已经写了千百行,换头文件要去逐个确认依赖,初期多花十分钟,后面一劳永逸。

4.2 scanf 报错:C4996 与不安全函数警告

现象是error C4996: 'scanf': This function or variable may be unsafe,后面还跟着建议改用scanf_s。原因是微软默认开启安全检查,把 CRT 库中缓冲区容易溢出的函数标记为不安全,编译器直接报错而不是警告。

解决方式有三条路。第一条是按要求改成scanf_s,注意它和scanf参数并不完全一样:

#include <cstdio> int a; char str[100]; scanf_s("%d", &a); // 整数不需要额外参数 scanf_s("%s", str, 100); // 字符串必须传缓冲区大小

scanf_s对整数参数与scanf一致,但对字符串输入多一个“缓冲区大小”参数,用来防止写入越界。这里第二个100是str数组的长度,如果填错成小于字符串长度,运行时会被安全检查拦下。写算法题时逻辑简单,但读单词、读行时容易漏掉第三个参数,编译不报错,运行可能拦截。

第二条路是加宏定义绕过安全检查。在源文件最顶部,在所有#include之前写上#define _CRT_SECURE_NO_WARNINGS,这能让整个编译单元对安全告警免疫。第三条路是预处理器定义,右键项目 → 配置属性 → C/C++ → 预处理器 → 预处理器定义,追加_CRT_SECURE_NO_WARNINGS,这样对整个项目所有文件生效。我一般用第三种,改一处省心。

4.3 字符集问题:Unicode、多字节与中文乱码

现象之一是调用SetWindowText或写中文输出时,参数类型对不上,编译器提示'LPWSTR' 与 'LPCSTR' 不兼容;现象之二是程序里明明写了中文,运行输出乱码成一片问号。

原因要落到字符集设置上。VS2019 新建项目默认使用 Unicode 字符集,意味着 API 的宽字符版本被优先解析,字符串常量要变成宽字符串。而老代码、教材例题大多按多字节字符集(MBCS/GBK)编写,窄字符函数和窄字符串类型才是它们的原生环境。解决办法是右键项目 → 配置属性 → 常规 → 字符集,从“使用 Unicode 字符集”改成“使用多字节字符集”。

如果你在折腾 Qt 配 VS2019,中文乱码的原因又多一层:VS 源码文件默认按本地区代码页保存(中文 Windows 是 GBK),Qt 的QString内部按 UTF-16 存储,源码里的中文字面量经编译器转码后常见不一致。保存源码时用“文件→高级保存选项→编码 UTF-8 带 BOM”,乱码问题能消除大半。VS2019 对应的工具集是 v142,Qt 安装时选“MSVC 2019 64-bit”而不是 MinGW,两者配合时再注意编码,中文基本不再翻车。

4.4 SDL 检查与解除绑定:关掉警报的代价

现象是编译时全屏刷安全函数警告,烦得看不下去;也有人为了“加速运行”去点掉一些莫名其妙的选项,结果代码正常但编译器行为变得很怪。原文里提到“将 SDL 检查改成否”和“解除 C++ 对 C 头文件的绑定”,这两项放在一起说。

SDL 全称 Security Development Lifecycle,开启后把不安全函数告警升级为错误,并强制启用一些运行时安全检查。右键项目 → 配置属性 → C/C++ → 常规 → SDL 检查,改成“否”,C4996 这类告警就会变成非阻断信息,scanf不加宏定义也能编译。代价是失去一部分静态安全检查,对刷题写小程序没多大影响,但要清楚这不是让程序变快,只是让编译更宽松。

网上流传的“解除 C++ 对 C 头文件绑定”操作,实际效果是修改头文件包含规则,跳过一部分 C 运行时头文件的兼容性处理,多数情况下体感不到任何提速。真想让算法题程序跑得快,该做的是把解决方案配置从 Debug 切到 Release,打开优化选项,而不是折腾这些编译开关。Debug 版默认关闭优化,同一段代码可能比 Release 慢几倍。

4.5 运行窗口一闪而过:Ctrl+F5 与 system 暂停

现象是程序执行完,控制台窗口瞬间关闭,输出结果根本看不清。原因很简单:控制台程序作为进程运行结束后,系统回收窗口,不再等待用户输入。

临时解法是在return 0之前加一句system("pause"),按下任意键后进程才退出。这个函数能压住窗口,但它依赖 Windows 的pause命令,拿到 Linux 或 macOS 上编译直接失败。正确习惯是用 Ctrl+F5 启动“开始执行(不调试)”,VS 在调试器外运行控制台程序时,会自动在程序退出前提示“请按任意键继续”。从那以后我写控制台代码一律按 Ctrl+F5,不再往代码里塞system("pause");这也让我在跨平台编译时少了一批 “cannot find system pause” 的报错。

5. 卸载与重装:删不干净 VS 的代价与清理命令

5.1 直接删文件夹为什么处处碰壁

很多人觉得 VS 不好用,随手就把安装目录删除,或者用各种右键的强力删除工具清掉整个Microsoft Visual Studio 2019文件夹。等到重新安装时,安装器要么提示“检测到已安装的版本”,要么在安装过程中报系统找不到指定文件,最后装出来的 IDE 还会带着一堆残留配置,界面语言是英文,扩展全部失效。

原因在于 VS 的安装信息并不只存在安装目录里。安装器把注册信息写在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\16.0下,下载缓存放在ProgramData\Microsoft\VisualStudio\Packages,用户的主题、扩展、启动配置放在%AppData%\Microsoft\VisualStudio\16.0_xxx。直接删程序目录,等于只拆了冰山一角,注册表和缓存里的残留仍指向旧版本,安装器重新检测时会认为“已安装”,于是拒绝覆盖。

正规卸载路径是先打开“Visual Studio Installer”,找到对应版本,点击“卸载”。安装器会先按组件列表移除已安装的工作负载,再清理注册表和对系统环境变量的改动。这个卸载步骤才是真正意义上的“彻底”,后面重装出错的可能性低很多。先执行卸载器,再谈手动清理,顺序不能反。

5.2 卸载之后手动补一刀:缓存、进程与临时文件

安装器卸载完成后,IDE 主体被移除,但 ProgramData 和 LocalAppData 里的缓存目录往往仍然存在。它们不影响下次安装,但会白占几个 GB,而且下载缓存里残留的陈旧组件包可能在重装时被优先复用,导致新版组件装不上去。这时候需要用命令手动补一刀。

# 停止所有残留的 VS 后台进程,安装器卸载通常不会主动杀 devenv Get-Process | Where-Object { $_.Name -like "vs_*" -or $_.Name -like "devenv*" } | Stop-Process -Force # 删除安装缓存与包目录 Remove-Item -Recurse -Force "$env:ProgramData\Microsoft\VisualStudio\Packages" -ErrorAction SilentlyContinue # 删除当前用户的 VS 配置文件目录 Remove-Item -Recurse -Force "$env:LocalAppData\Microsoft\VisualStudio" -ErrorAction SilentlyContinue

第一段命令把所有以vs_或devenv开头的进程强制结束,避免卸载过程中文件被占用。第二个Remove-Item清掉安装缓存,第三个清理当前用户级配置。-ErrorAction SilentlyContinue表示目录不存在时静默跳过,不会报红吓人。注册表我一般不建议手动改,除非你明确知道要删哪个键,否则误删系统全局配置比 VS 残留麻烦得多。

%Temp%目录下还可能有 VS 安装器的临时文件,用系统自带的磁盘清理把“临时文件”勾上即可,不影响系统安全。重装前最好重启一次电脑,确保文件占用全部释放,这个操作花不了两分钟,但能省掉后续一堆玄学报错。

5.3 重装版本冲突:升级到 VS2022 后找不到 v142 工具链

场景很常见:原来装了 VS2022,为了打开别人发来的 VS2019 项目又装了 2019,结果新建项目里看不到 MSVC v142 编译器,或者编译时报工具集 v142 未安装。

原因在于 VS2019 和 VS2022 的安装是并存的,它们共享 Visual Studio Installer,但各自管理自己的工作负载组件。VS2022 默认安装的是 MSVC v143 工具集,不代表 v142 会自动跟上。要编译 VS2019 时代的项目,必须在安装器里对 VS2019 执行“修改”,勾选“使用 C++ 的桌面开发”,v142 工具集才会补装。

还有一种情况是删除 VS2019 后重装,发现打开旧项目报“需要 .NET Framework 4.6.2 目标包”。这个目标包属于“单个组件”,卸载时如果只移除工作负载,它可能被当作独立组件保留或一同清掉。解决方式同样是打开安装器 → 修改 → 单个组件,勾选对应的 .NET Framework 目标包。多版本共存时,不要指望 A 版本的组件能被 B 版本调用,每个版本缺了组件就独立装,这类问题基本都是配置缺件造成的。

6. 进阶操作:命令行改组件、配置备份与调试习惯

安装器在图形界面下能做的操作,在命令行里基本都能重放。内网批量部署、多台机器统一配置时,图形界面点一遍太慢,用命令更可控:

vs_installer.exe modify --installPath "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community" --add Microsoft.VisualStudio.Workload.NativeDesktop --quiet

--installPath指定已安装实例位置,--add表示追加安装工作负载,--quiet不进交互界面。如果离线部署,同样的命令会优先读取本地缓存,不再访问外网。

配置文件备份也别忘。VS2019 的主题、字体、窗口布局、快捷键都散在用户目录里,我习惯重装前导出一次:

配置项位置
主题、字体、窗口布局%AppData%\Microsoft\VisualStudio\16.0_xxx
导入导出设置工具 → 导入导出设置,文件可拷走
扩展插件扩展 → 管理扩展,清单可导出

主题在“工具 → 选项 → 环境 → 常规”里改深色,代码字体在“字体和颜色”里调,这两个设置跟着配置文件走,备份后重装一次还原。调试习惯上,真正应养成的只有三个快捷键:Ctrl+F5 直接运行、F9 下断点、F10 逐行执行。从那以后我每次重装 VS 前都强制自己走一遍“导出配置 → 安装器卸载 → 清缓存 → 重装还原”,这套流程是踩过坑后才固定下来的,希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/3 1:28:40

腾讯云DBA一面实战:核心考点与避坑指南

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

作者头像 李华
网站建设 2026/10/3 1:28:39

STM32L051低功耗模式LPUART串口唤醒实战详解

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

作者头像 李华
网站建设 2026/10/3 1:27:31

答辩PPT制作全指南:从结构设计到现场放映的避坑手册

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

作者头像 李华
网站建设 2026/10/3 1:26:01

工业级步进电机控制:DRV8818与PIC18F47K40硬实时协同设计

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

作者头像 李华