VS 2022/2026 安装“使用C++的桌面开发”后 cl.exe 即可用,但需将项目属性中“编译为”设为“编译为 C 代码 (/TC)”并指定 C17 标准,否则 .c 文件被当 C++ 编译导致 printf 等报错;无需配置 tasks.json/launch.json;注意 Windows SDK 版本、平台(x64)及子系统设置。

不需要额外配置编译器,VS 2022/2026 安装时勾选“使用C++的桌面开发”工作负载后,cl.exe 就已就位,C语言可直接用它编译——但必须手动改文件后缀、关预编译头、调编译选项,否则会按C++规则处理C代码,报错或行为异常。
为什么main.c会被当C++编译
VS 默认没有独立的 C 项目模板,所有“空项目”或“控制台应用”都走 C++ 工具链。新建 .cpp 文件写 C 语法没问题,但如果你新建的是 .c 文件,VS 仍可能沿用 C++ 编译器设置,尤其当项目属性里没明确指定语言标准时。
- 现象:写
int main() { printf("hello"); }却提示printf未声明,或要求加#include <stdio.h>后仍报error C2065: 'printf' : undeclared identifier - 原因:
C/C++ → 高级 → 编译为被设为默认或编译为 C++ 代码 (/TP),导致.c文件被强制当 C++ 处理 - 解法:右键项目 → 属性 →
C/C++ → 高级 → 编译为改成编译为 C 代码 (/TC)(注意是 /TC,不是 /TP) - 额外建议:在
C/C++ → 语言 → C 语言标准中设为ISO C17 标准 (/std:c17),避免用到 C++ 特性
tasks.json 和 launch.json 在 VS 里根本不用配
VS 不读 tasks.json 或 launch.json——那是 VS Code 的东西。你在 VS 里点“生成”或按 Ctrl+Shift+B,调用的是 MSBuild + cl.exe;按 F5 调试,走的是内置的 msvsmon 调试器。所有构建逻辑都在项目属性页里,比如:
Visual Studio 18.8.1 官方固定版本安装引导程序,当前条目使用微软发布历史中的 Professional Web Installer,适合旧项目兼容、环境回退、复现特定构建链和排查版本差异等场景。
-
常规 → 配置类型:选应用程序(.exe),别选动态库(.dll)(除非真要写 DLL) -
C/C++ → 代码生成 → 运行时库:新手建议用多线程调试 DLL (/MDd)(调试版),避免/MTd导致链接失败 -
链接器 → 系统 → 子系统:控制台程序必须设为控制台 (/SUBSYSTEM:CONSOLE),否则双击运行黑窗口一闪而退 -
调试 → 命令参数:如需传参给main(int argc, char* argv[]),填在这里,不用改代码
常见编译失败:找不到 Windows SDK 或 ucrtbase.dll
错误信息常是:fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory 或运行时报 ucrtbase.dll 丢失。这不是你代码的问题,是 SDK 路径没对上。
- 检查点1:安装 VS 时是否勾选了“Windows 10/11 SDK”?没勾就去“修改 VS 安装”里补装
- 检查点2:项目属性 →
常规 → Windows SDK 版本是否为空或显示“最新版本”?手动选一个已安装的具体版本(如10.0.22621.0) - 检查点3:如果用的是 VS 2026,确认它没自动降级到旧 SDK;某些新头文件(如
<stdalign.h>)只在较新 SDK 中提供 - 规避技巧:临时把
C/C++ → 常规 → 附加包含目录加上$(UniversalCRT_IncludePath),但治标不治本,根源还是 SDK 选对
最易被忽略的一点:VS 的“解决方案配置”下拉框(工具栏左上角)默认是 Debug,但“平台”可能是 Win32;而现代机器基本是 x64,若你没留意,cl.exe 会按 32 位模式编译,生成的 EXE 在 64 位系统上虽能跑,但调试时变量监视可能乱码、指针地址截断——务必核对平台是否为 x64 或 ARM64,且与你的目标一致。

















