C++的发展历程
1. 历史沿革
诞生阶段(1979-1983)
- Bjarne Stroustrup 在贝尔实验室开发"C with Classes"
- 增加类、继承等面向对象特性
- 保持与C语言的兼容性
标准化阶段(1983-1998)
- 1983年命名为C++
- 1985年发布第一个商业版本
- 1998年发布第一个ISO标准(C++98)
现代化阶段(2011至今)
- C++11:现代C++的开端
- C++14:小幅改进
- C++17:增加文件系统等特性
- C++20:协程、模块等重大更新
- C++23:最新标准
2. 主要特性演进
C++98/03
- 标准模板库(STL)
- 异常处理
- 命名空间
- RTTI(运行时类型识别)
C++11
- 自动类型推导(auto)
- 基于范围的for循环
- Lambda表达式
- 智能指针
- 右值引用和移动语义
C++14/17/20
- 泛型lambda
- 文件系统库
- 并行算法
- 协程
- 模块系统
开发环境搭建
1. IDE选择
CLion(推荐)
- 跨平台支持
- 内置CMake支持
- 强大的代码分析和重构功能
- 集成调试器
- 安装:
scoop install clion
Visual Studio
- Windows平台最佳选择
- 完整的开发工具链
- 优秀的调试功能
VSCode + 插件
- 轻量级选择
- 需要额外配置
2. 工具链配置
编译器选择
- LLVM-MinGW
基于LLVM/Clang的Windows工具链
更好的错误诊断和编译速度
完整的C++标准支持
安装步骤:
1 2
# 安装llvm-mingw scoop install llvm-mingw
- LLVM-MinGW
构建系统(Ninja)
- 高性能构建系统,替代传统的Make
- 特点:
- 更快的构建速度
- 更简单的构建规则
- 更好的增量构建支持
- 并行构建能力强
- CLion已内置Ninja,无需额外安装
包管理器(vcpkg)
用于管理C++第三方库
支持Windows/Linux/MacOS
安装步骤:
1 2 3 4 5
# 安装vcpkg scoop install vcpkg # 初始化vcpkg(首次使用时运行) vcpkg integrate install
3. CLion项目配置
配置LLVM-MinGW工具链
- 打开
File
>Settings
>Build, Execution, Deployment
>Toolchains
- 点击
+
添加新工具链,选择MinGW
- 设置
MinGW Home
为%USERPROFILE%\scoop\apps\llvm-mingw\current
- 确保自动检测到以下工具:
- C Compiler:
cc.exe
- C++ Compiler:
c++.exe
- Debugger:
lldb.exe
- C Compiler:
- 如果需要手动设置编译器路径:
- C Compiler:
%USERPROFILE%\scoop\apps\llvm-mingw\current\bin\cc.exe
- C++ Compiler:
%USERPROFILE%\scoop\apps\llvm-mingw\current\bin\c++.exe
- C Compiler:
- 将此工具链移动到列表顶部设为默认
- 打开
新建项目
- 选择
File
>New Project
- 选择
C++ Executable
- 在
Toolchain
下拉菜单中选择配置好的LLVM-MinGW - CMake会自动配置
- 选择
配置运行设置
- 点击顶部工具栏的 “Add Configuration” 或 “Edit Configurations”
- 点击左上角 “+” 按钮,选择 “CMake Application”
- 配置选项:
- Name:为配置命名(如项目名称)
- Target:选择要运行的目标(通常是项目名)
- Executable:自动选择生成的可执行文件
- 可以创建多个配置:
- Debug配置:用于调试
- Release配置:用于性能测试
- 配置工作目录(Working Directory)如果需要
- 设置程序参数(Program arguments)如果需要
- 点击 “OK” 保存配置
配置CMake
CLion默认配置说明:
- 新建项目时自动创建基本CMake配置
- 默认包含Debug和Release两种模式
- 基本的编译和运行功能已经可用
- 适合简单项目和学习使用
手动配置(推荐用于正式项目):
- 进入
File
>Settings
>Build, Execution, Deployment
>CMake
- 创建两个CMake Profile:Debug和Release,都绑定到LLVM-MinGW工具链
- 在
Generator
下拉菜单中选择Ninja
- Debug配置在
CMake options
中添加以下选项:
1
-G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
- 进入
Release配置在
CMake options
中添加以下选项:1
-G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
选项说明:
-G Ninja
:使用Ninja构建系统,比Make更快-DCMAKE_BUILD_TYPE=Debug/Release
:设置构建类型- Debug:包含调试信息,不优化
- Release:开启优化,移除调试信息
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
:生成编译命令数据库,用于代码分析
在CMakeLists.txt中添加链接器选项:
1 2
# 使用lld链接器 add_link_options(-fuse-ld=lld)
点击
Apply
并重新加载CMake项目可以在CLion底部工具栏切换Debug和Release模式
基本CMake配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
# CMakeLists.txt cmake_minimum_required(VERSION 3.30) project(CppLearning) # 包管理配置 # 注意:vcpkg配置必须在其他配置之前设置 set(CMAKE_TOOLCHAIN_FILE "$ENV{USERPROFILE}/scoop/apps/vcpkg/current/scripts/buildsystems/vcpkg.cmake") # C++标准设置 set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 强制使用指定的C++标准,如果编译器不支持则报错 set(CMAKE_CXX_EXTENSIONS OFF) # 禁用编译器特定扩展,确保跨平台兼容性 # 编译选项 add_compile_options( -Wall # 启用所有警告 -Wextra # 启用额外警告 -Wpedantic # 严格遵守标准 -Werror # 将警告视为错误 -fdiagnostics-color=always # 彩色诊断信息 ) # 性能优化选项 # Release模式优化设置 # 注意:如果用于逆向工程学习,建议降低或禁用优化,使生成的代码更易于分析 # -O0: 禁用优化 # -O1: 基本优化 # -O2: 中等优化 # -O3: 最高优化级别 set(CMAKE_CXX_FLAGS_RELEASE "-O2") # 使用中等优化级别,在性能和可读性间平衡 # 如果用于逆向工程学习,可以使用以下设置: # set(CMAKE_CXX_FLAGS_RELEASE "-O0 -g") # 禁用优化并保留调试信息 # Debug模式设置 set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g") # 禁用优化,包含调试信息 # 创建可执行文件 add_executable(main main.cpp) # 添加依赖(如果需要) find_package(fmt CONFIG REQUIRED) target_link_libraries(main PRIVATE fmt::fmt)
4. 代码风格配置
CLion内置格式化
File
>Settings
>Editor
>Code Style
>C/C++
- 可导入Google或LLVM风格
Clang-Format配置
1 2 3 4
# .clang-format BasedOnStyle: Google IndentWidth: 4 ColumnLimit: 100
5. 调试配置
CLion调试设置
- 设置断点:点击行号左侧或使用
Ctrl + F8
- 启动调试:点击虫子图标或使用
Shift + F9
- 调试控制:
- F8:单步执行(Step Over)
- F7:步入函数(Step Into)
- Shift + F8:步出函数(Step Out)
- F9:继续执行(Resume)
- 设置断点:点击行号左侧或使用
变量监视
- 自动窗口:显示当前上下文的变量
- 监视窗口:添加要跟踪的变量表达式
- 求值:使用
Alt + F8
计算表达式
LLDB调试器使用
命令行调试:
1 2 3 4 5 6 7 8 9 10 11 12 13
# 编译带调试信息的程序 clang++ -g -O0 main.cpp -o main # 启动调试器 lldb main # 常用命令 breakpoint set --file main.cpp --line 10 # 设置断点 run # 运行程序 frame variable # 查看变量 print variable_name # 打印变量值 continue # 继续执行 quit # 退出调试器
6. 性能优化
编译优化
发布模式:
1 2 3 4 5 6 7 8
# 启用链接时优化 set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # 使用快速数学 add_compile_options(-ffast-math) # 启用SIMD指令 add_compile_options(-march=native)
调试模式
添加调试信息:
1 2
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address")
7. 常见问题解决
编译器配置问题
找不到编译器:
- 检查LLVM-MinGW安装路径
- 确认环境变量是否正确设置
- 尝试重启CLion
编译错误:
- 检查CMake选项中的编译器设置
- 确保使用正确的C++标准
- 查看Build输出获取详细错误信息
CMake配置问题
CMake刷新失败:
- 删除build目录重新配置
- 检查CMakeLists.txt语法
- 确认所有依赖路径正确
CMake缓存错误(Error: could not load cache):
- 在CLion中:
- 点击
File
>Invalidate Caches / Restart
- 选择
Invalidate and Restart
- 点击
- 手动清理:
- 删除项目的
cmake-build-*
目录 - 重新打开项目,让CLion重新生成CMake配置
- 删除项目的
- 缓存清理后的重新配置:
- 等待CLion重新启动
- 点击右下角的 “Load CMake Project”
- 重新检查工具链配置(Toolchains)
- 重新设置CMake配置(Debug和Release)
- 等待项目重新加载和索引
- 如果问题仍然存在:
- 检查CMakeLists.txt中的项目名称是否正确
- 确认CMake版本要求是否与安装版本匹配
- 验证所有路径中不包含特殊字符
- 在CLion中:
找不到包:
- 确认vcpkg正确安装和集成
- 检查CMAKE_TOOLCHAIN_FILE路径
- 运行
vcpkg install package:x64-windows
安装缺失的包
vcpkg集成问题
环境变量设置:
1 2 3 4 5 6
# 设置VCPKG_ROOT环境变量 [Environment]::SetEnvironmentVariable( "VCPKG_ROOT", "$env:USERPROFILE\scoop\apps\vcpkg\current", "User" )
包安装失败:
- 检查网络连接
- 确认包名称和平台正确
- 尝试清理vcpkg缓存:
vcpkg remove --outdated
第一个程序
1. Hello World
|
|
2. 构建和运行
使用CLion
- 点击运行按钮
- 或使用快捷键
Shift + F10
使用命令行
1 2 3 4 5
# 编译 clang++ -std=c++17 main.cpp -o main # 运行 ./main
推荐学习资源
官方文档
在线教程
书籍推荐
- 《C++ Primer》(第5版)
- 《Effective Modern C++》
- 《C++ Templates》(第2版)