1. C++发展历程和环境搭建

C++的发展历程

1. 历史沿革

  1. 诞生阶段(1979-1983)

    • Bjarne Stroustrup 在贝尔实验室开发"C with Classes"
    • 增加类、继承等面向对象特性
    • 保持与C语言的兼容性
  2. 标准化阶段(1983-1998)

    • 1983年命名为C++
    • 1985年发布第一个商业版本
    • 1998年发布第一个ISO标准(C++98)
  3. 现代化阶段(2011至今)

    • C++11:现代C++的开端
    • C++14:小幅改进
    • C++17:增加文件系统等特性
    • C++20:协程、模块等重大更新
    • C++23:最新标准

2. 主要特性演进

  1. C++98/03

    • 标准模板库(STL)
    • 异常处理
    • 命名空间
    • RTTI(运行时类型识别)
  2. C++11

    • 自动类型推导(auto)
    • 基于范围的for循环
    • Lambda表达式
    • 智能指针
    • 右值引用和移动语义
  3. C++14/17/20

    • 泛型lambda
    • 文件系统库
    • 并行算法
    • 协程
    • 模块系统

开发环境搭建

1. IDE选择

  1. CLion(推荐)

    • 跨平台支持
    • 内置CMake支持
    • 强大的代码分析和重构功能
    • 集成调试器
    • 安装:scoop install clion
  2. Visual Studio

    • Windows平台最佳选择
    • 完整的开发工具链
    • 优秀的调试功能
  3. VSCode + 插件

    • 轻量级选择
    • 需要额外配置

2. 工具链配置

  1. 编译器选择

    • LLVM-MinGW
      • 基于LLVM/Clang的Windows工具链

      • 更好的错误诊断和编译速度

      • 完整的C++标准支持

      • 安装步骤:

        1
        2
        
        # 安装llvm-mingw
        scoop install llvm-mingw
        
  2. 构建系统(Ninja)

    • 高性能构建系统,替代传统的Make
    • 特点:
      • 更快的构建速度
      • 更简单的构建规则
      • 更好的增量构建支持
      • 并行构建能力强
    • CLion已内置Ninja,无需额外安装
  3. 包管理器(vcpkg)

    • 用于管理C++第三方库

    • 支持Windows/Linux/MacOS

    • 安装步骤:

      1
      2
      3
      4
      5
      
      # 安装vcpkg
      scoop install vcpkg
      
      # 初始化vcpkg(首次使用时运行)
      vcpkg integrate install
      

3. CLion项目配置

  1. 配置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: %USERPROFILE%\scoop\apps\llvm-mingw\current\bin\cc.exe
      • C++ Compiler: %USERPROFILE%\scoop\apps\llvm-mingw\current\bin\c++.exe
    • 将此工具链移动到列表顶部设为默认
  2. 新建项目

    • 选择 File > New Project
    • 选择 C++ Executable
    • Toolchain 下拉菜单中选择配置好的LLVM-MinGW
    • CMake会自动配置
  3. 配置运行设置

    • 点击顶部工具栏的 “Add Configuration” 或 “Edit Configurations”
    • 点击左上角 “+” 按钮,选择 “CMake Application”
    • 配置选项:
      • Name:为配置命名(如项目名称)
      • Target:选择要运行的目标(通常是项目名)
      • Executable:自动选择生成的可执行文件
    • 可以创建多个配置:
      • Debug配置:用于调试
      • Release配置:用于性能测试
    • 配置工作目录(Working Directory)如果需要
    • 设置程序参数(Program arguments)如果需要
    • 点击 “OK” 保存配置
  4. 配置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模式

  5. 基本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. 代码风格配置

  1. CLion内置格式化

    • File > Settings > Editor > Code Style > C/C++
    • 可导入Google或LLVM风格
  2. Clang-Format配置

    1
    2
    3
    4
    
    # .clang-format
    BasedOnStyle: Google
    IndentWidth: 4
    ColumnLimit: 100
    

5. 调试配置

  1. CLion调试设置

    • 设置断点:点击行号左侧或使用 Ctrl + F8
    • 启动调试:点击虫子图标或使用 Shift + F9
    • 调试控制:
      • F8:单步执行(Step Over)
      • F7:步入函数(Step Into)
      • Shift + F8:步出函数(Step Out)
      • F9:继续执行(Resume)
  2. 变量监视

    • 自动窗口:显示当前上下文的变量
    • 监视窗口:添加要跟踪的变量表达式
    • 求值:使用 Alt + F8 计算表达式
  3. 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. 编译优化

    • 发布模式:

      1
      2
      3
      4
      5
      6
      7
      8
      
      # 启用链接时优化
      set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
      
      # 使用快速数学
      add_compile_options(-ffast-math)
      
      # 启用SIMD指令
      add_compile_options(-march=native)
      
  2. 调试模式

    • 添加调试信息:

      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. 常见问题解决

  1. 编译器配置问题

    • 找不到编译器:

      • 检查LLVM-MinGW安装路径
      • 确认环境变量是否正确设置
      • 尝试重启CLion
    • 编译错误:

      • 检查CMake选项中的编译器设置
      • 确保使用正确的C++标准
      • 查看Build输出获取详细错误信息
  2. CMake配置问题

    • CMake刷新失败:

      • 删除build目录重新配置
      • 检查CMakeLists.txt语法
      • 确认所有依赖路径正确
    • CMake缓存错误(Error: could not load cache):

      1. 在CLion中:
        • 点击 File > Invalidate Caches / Restart
        • 选择 Invalidate and Restart
      2. 手动清理:
        • 删除项目的 cmake-build-* 目录
        • 重新打开项目,让CLion重新生成CMake配置
      3. 缓存清理后的重新配置:
        • 等待CLion重新启动
        • 点击右下角的 “Load CMake Project”
        • 重新检查工具链配置(Toolchains)
        • 重新设置CMake配置(Debug和Release)
        • 等待项目重新加载和索引
      4. 如果问题仍然存在:
        • 检查CMakeLists.txt中的项目名称是否正确
        • 确认CMake版本要求是否与安装版本匹配
        • 验证所有路径中不包含特殊字符
    • 找不到包:

      • 确认vcpkg正确安装和集成
      • 检查CMAKE_TOOLCHAIN_FILE路径
      • 运行 vcpkg install package:x64-windows 安装缺失的包
  3. 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

1
2
3
4
5
6
#include <iostream>

int main() {
    std::cout << "Hello, Modern C++!" << std::endl;
    return 0;
}

2. 构建和运行

  1. 使用CLion

    • 点击运行按钮
    • 或使用快捷键 Shift + F10
  2. 使用命令行

    1
    2
    3
    4
    5
    
    # 编译
    clang++ -std=c++17 main.cpp -o main
    
    # 运行
    ./main
    

推荐学习资源

  1. 官方文档

  2. 在线教程

  3. 书籍推荐

    • 《C++ Primer》(第5版)
    • 《Effective Modern C++》
    • 《C++ Templates》(第2版)

57.12k 字
43篇文章