掌握Visual C++ 2019 Build Tools的高效开发方法

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Visual Studio Build Tools中的Visual C++ 2019 Build Tools是针对C++开发的关键组件,提供了编译和构建项目的轻量级解决方案。本文详细介绍了Visual C++ 2019 Build Tools的核心组件,如MSVC编译器、C++运行时库、Windows SDK等,以及如何进行安装配置、使用场景、实践应用和最佳实践。通过本文的学习,读者将能够掌握如何使用Build Tools进行高效开发,特别是在命令行构建、非IDE开发、单独构建组件等方面。 VisualC_D14.7z

1. Visual C++ 2019 Build Tools概述

Visual C++ 2019 Build Tools简介

Visual C++ 2019 Build Tools 是 Microsoft Visual Studio 中一个专注于C++开发的独立工具集,它提供了编译和构建C++程序所需的核心组件。这个工具包特别适合那些只需要C++构建工具的开发者,因为它不需要安装整个庞大的Visual Studio IDE,从而节省资源并提高构建效率。它包括了最新的Microsoft Visual C++(MSVC)编译器、链接器和标准库,这些是构建现代C++应用程序不可或缺的部分。

开发环境的必要性

在开始C++项目开发前,设置一个正确的开发环境至关重要。Visual C++ 2019 Build Tools 为开发者提供了一种快速配置和优化开发环境的方法。它支持最新的C++17标准,并且为即将到来的C++20标准提供了预览支持,确保开发者能够利用最新的语言特性和库功能。

本章小结

本章节作为文章的引入部分,旨在为您提供对Visual C++ 2019 Build Tools的基本了解,以及它在现代C++项目开发中的重要角色。接下来的章节将深入探讨如何使用这个工具包进行C++项目的编译、构建和优化。在后续章节中,我们将详细介绍如何安装和配置Build Tools,以及如何利用其提供的各种高级特性来提升开发效率和程序质量。

2. MSVC编译器使用与C++标准支持

2.1 MSVC编译器的安装与配置

2.1.1 安装MSVC编译器的步骤和注意事项

安装MSVC编译器是进行Visual C++开发的第一步,需要确保系统满足其硬件和软件要求。以下是安装编译器的步骤,以及在安装过程中应注意的事项。

安装步骤:

  1. 下载Visual Studio Installer: 访问[Visual Studio 官网](***,下载最新版本的Visual Studio Installer。
  2. 运行 Installer: 启动下载的安装程序,并选择“修改”选项。
  3. 选择工作负载: 在“工作负载”选项卡中,找到“C++桌面开发”并确保选中。
  4. 组件选择: 展开“C++桌面开发”工作负载,选择需要安装的组件,如MSVC v142 - VS 2019 C++ x64/x86构建工具。
  5. 安装过程: 点击“修改”按钮开始安装。安装过程中,Visual Studio Installer会自动下载所需的安装文件。
  6. 安装完成: 安装完成后,关闭安装程序。

注意事项:

  • 确保有足够磁盘空间,因为安装程序需要额外空间下载安装包。
  • 在安装过程中,确保网络连接稳定。
  • 在选择组件时,注意选择与目标平台相匹配的版本(x64/x86)。
  • 保持Visual Studio Installer更新,以安装最新版本的编译器和组件。

代码块示例:

# 示例命令行安装过程
vs_***ponent.VC.CMake.Project

逻辑分析: 上述命令是一个使用命令行的示例,使用了 vs_community.exe 工具进行安装。 --quiet 标志用于静默安装, --norestart 避免安装过程中自动重启计算机, --add 参数后跟的是需要安装的组件名称。

2.1.2 配置MSVC编译器以支持不同版本的C++

MSVC编译器支持多个版本的C++标准,而配置编译器以使用特定标准版本通常在项目设置中进行。

  1. 创建或打开项目: 在Visual Studio中创建新项目或打开现有项目。
  2. 项目属性设置: 右键点击项目名,选择“属性”来打开项目属性页面。
  3. 配置编译器设置: 在左侧导航栏中,展开“配置属性”并选择“常规”。在右侧面板中找到“C++语言标准”下拉菜单。
  4. 选择C++标准: 从下拉菜单中选择所需的C++标准版本,如“ISO C++17标准 (/std:c++17)”。
  5. 应用并保存: 点击“应用”后“确定”来保存设置。

表格示例: | 标准版本 | 选择项示例 | |-----------|-------------------------------| | C++98 | /std:c++98 | | C++11 | /std:c++11 | | C++14 | /std:c++14 | | C++17 | /std:c++17 | | C++20 | /std:c++20 |

逻辑分析: 在Visual Studio中配置编译器的标准版本是为了保证编译结果符合开发者预期的标准版本。通过选择正确的编译器标准,开发者可以使用不同的语言特性和库。例如,C++11标准引入了auto关键字,智能指针和lambda表达式等新特性。

2.2 C++标准的实现与支持

2.2.1 C++98/03标准的实现

C++98是C++语言的第一个国际标准,而C++03是其修订版。MSVC编译器对这两个标准提供了广泛的支持。

C++98/03特性: - 全局变量初始化: 支持全局变量的初始化。 - 异常处理: 提供try/catch/throw异常处理机制。 - 模板: 实现了模板编程,包括函数模板和类模板。

代码块示例:

#include <iostream>

int main() {
    try {
        // Exception handling example
        throw std::runtime_error("A runtime error occurred!");
    } catch (const std::exception& e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
    }
    return 0;
}

逻辑分析: 上述代码展示了使用 throw 关键字抛出异常,并使用 try/catch 块捕获和处理异常的情况。这是C++98标准中的异常处理机制的一个基本用例。

2023/2/20更新:

接下来的部分内容将包含2.2.2和2.2.3节的内容,以遵循章节层次的要求。

3. C++运行时库与Windows SDK

3.1 C++运行时库的理解和使用

3.1.1 C++运行时库的种类和选择

在C++开发过程中,运行时库是提供内存分配、异常处理、输入输出等基础功能的软件组件。它对应用程序的性能和稳定性起到决定性作用。C++运行时库主要分为静态链接库、动态链接库(DLL)和多线程版本三种类型。

  • 静态链接库:将库文件直接嵌入到最终生成的可执行文件中。优点是可执行文件独立于系统,可移植性高;缺点是最终可执行文件体积较大。
  • 动态链接库(DLL):将库代码保留在单独的文件中,由运行时动态加载。优点是可执行文件较小,便于库的更新和维护;缺点是依赖于特定版本的库文件。
  • 多线程版本:针对多线程应用优化,提供线程安全的函数实现。

对于开发人员而言,选择合适的运行时库类型需要考虑以下因素: - 应用程序的平台独立性。 - 应用程序的性能需求。 - 代码维护和更新的便利性。

3.1.2 C++运行时库的使用注意事项

使用C++运行时库时,应注意以下几点以保证程序的稳定性和效率: - 避免内存泄漏:正确使用new和delete操作符,或使用智能指针来自动管理内存。 - 正确处理异常:合理使用try-catch结构来捕获和处理异常,保证程序的健壮性。 - 使用安全函数:替代不安全的旧式C库函数,例如使用strsafe.h中的安全字符串函数。 - 线程安全考虑:当使用多线程运行时库时,注意保护全局资源,避免数据竞争和条件竞争问题。

代码示例:

#include <iostream>
#include <exception>
#include <memory>

// 使用智能指针管理动态分配的内存
std::unique_ptr<int> create_int() {
    return std::make_unique<int>(42);
}

void handle_exception() {
    try {
        // ... 异常处理代码 ...
        throw std::runtime_error("An error occurred");
    } catch (const std::exception& e) {
        std::cerr << "Exception caught: " << e.what() << std::endl;
    }
}

int main() {
    auto int_ptr = create_int();
    handle_exception();
    return 0;
}

运行时库的使用是C++编程中的基础部分,恰当的选择和使用运行时库功能,对于编写高效、稳定的应用程序至关重要。

4. NuGet包管理器和CMake工具集成

4.1 NuGet包管理器的理解和使用

4.1.1 NuGet包管理器的安装和配置

NuGet是针对Visual Studio的包管理器,它极大地简化了项目依赖项的管理过程。开发者可以通过NuGet安装、更新和维护在项目中所使用的库。安装NuGet十分简单,只需在Visual Studio的安装器中选择它,或者通过NuGet的命令行工具来安装。

安装NuGet包管理器后,需要进行一些配置,比如指定包的源。这可以通过Visual Studio中的"工具" -> "NuGet包管理器" -> "包管理器设置"进行配置。此外,开发者还需要配置包的恢复行为,确保每次打开项目时,所需的依赖项都能自动被下载和安装。

4.1.2 使用NuGet包管理器管理依赖项

NuGet包管理器的核心功能之一是管理依赖项。开发者可以通过NuGet包管理器,搜索、安装、更新和删除依赖库。在Visual Studio中,可以通过"解决方案资源管理器"中右键点击项目,选择"管理NuGet包"来完成这些操作。

NuGet还支持包的版本控制,开发者可以根据项目的需要,选择合适的版本进行安装。此外,NuGet支持项目间的包共享,这意味着可以将某个项目安装的包,作为依赖项,供同一解决方案中的其他项目使用。

4.2 CMake工具的理解和使用

4.2.1 CMake工具的安装和配置

CMake是一个跨平台的自动化构建系统,支持使用简单的脚本文件(CMakeLists.txt)来配置项目的构建过程。安装CMake通常涉及到下载安装程序,并运行它。安装完成后,需要确保CMake的可执行文件路径被添加到系统的PATH环境变量中。

配置CMake首先需要创建一个CMakeLists.txt文件,这个文件包含了关于项目构建过程的指令。CMake的配置过程可以通过命令行工具或者使用CMake的GUI工具进行。在Windows环境下,CMake可以通过与Visual Studio的集成来配置项目的生成设置。

4.2.2 使用CMake工具构建项目

使用CMake构建项目的过程分为两个主要步骤:配置和生成。配置阶段通常会读取CMakeLists.txt文件,根据里面的指令生成构建系统所需的文件。生成阶段则会根据这些文件创建最终的可执行文件或库。

开发者可以通过命令行运行如下命令来配置和生成项目:

cmake -B build
cmake --build build

其中, -B build 指定了构建目录, --build build 指定了在该目录中构建项目。

4.3 NuGet与CMake的集成和协同工作

4.3.1 集成NuGet和CMake的步骤和注意事项

将NuGet与CMake集成可以简化依赖项的管理。一种常见的集成方式是在CMakeLists.txt中嵌入NuGet命令,以便在构建过程中自动恢复依赖项。例如,CMake提供了 FetchContent 模块来下载和集成外部项目。

集成的步骤可能包括:

  1. 在CMakeLists.txt中使用 FetchContent 模块或者 find_package 命令查找和下载NuGet包。
  2. 根据需要配置这些包。
  3. 在构建过程中确保这些包被正确处理。

在集成过程中需要注意包的许可协议、版本冲突以及构建系统的兼容性问题。

4.3.2 集成NuGet和CMake的优势和应用场景

集成NuGet和CMake可以带来诸多好处,比如:

  • 自动化依赖项管理,避免手动复制库文件。
  • 更好的项目构建可移植性,因为CMake支持跨平台。
  • 避免在不同项目之间重复安装相同的依赖项。

这种集成特别适用于需要频繁更新依赖项的大型项目,或者在多个项目间共享依赖项的开发场景。

在后续的章节中,我们将深入探讨具体的集成实践和案例分析。现在,让我们继续深入了解Visual C++ 2019 Build Tools的其他高级功能和最佳实践。

5. 安装与配置过程指南

5.1 Visual C++ 2019 Build Tools的安装

5.1.1 安装前的准备工作

在安装Visual C++ 2019 Build Tools之前,必须确保你的系统满足以下基本要求:

  • 操作系统:Windows 10 Version 1703 (Build 15063) 或更高版本
  • 磁盘空间:至少需要20GB的可用空间
  • 处理器:至少1.8 GHz的x64处理器
  • 内存:至少需要2GB RAM

在安装前,请确保所有其他应用程序已经关闭,以避免安装过程中可能出现的文件访问冲突。此外,建议在安装前进行系统更新,以确保Windows功能的完整性和安全性。安装Visual C++ 2019 Build Tools时,你可能需要网络连接,因为安装程序会下载必要的安装文件。

5.1.2 安装过程中的常见问题及解决方法

在安装Visual C++ 2019 Build Tools时,可能会遇到一些常见问题:

  • 安装失败 :如果安装过程中出现失败的提示,通常会附带错误代码。此时,你可以根据错误代码进行网络搜索,找到相关的解决方案。常见的解决方法包括重新启动安装程序,检查网络连接,或者在安装前使用Windows Update更新系统。

  • 系统兼容性问题 :如果系统不满足上述要求,可能会遇到兼容性错误。请确保系统符合Visual C++ 2019 Build Tools的最低要求,并考虑升级你的硬件配置。

  • 长时间安装 :安装过程可能需要较长时间,特别是如果网络连接较慢,或者选择了包含多个组件的安装选项。在这种情况下,请耐心等待,并确保网络连接稳定。

  • 缺少系统组件 :在安装过程中,系统可能会提示缺少某些必要的系统组件。请按照提示安装所需的组件,然后继续安装过程。

5.2 Visual C++ 2019 Build Tools的配置

5.2.1 配置Visual C++ 2019 Build Tools的步骤和注意事项

安装完成后,需要对Visual C++ 2019 Build Tools进行配置,以便它可以满足你的特定开发需求。以下是一些基本的配置步骤:

  1. 打开Visual Studio Installer :通常在安装完成后,Visual Studio Installer会自动打开。如果没有,你可以通过开始菜单找到它。

  2. 修改工作负载 :在Visual Studio Installer中,选择“修改”按钮,然后在工作负载中选择适合你的开发需求的选项。例如,如果你需要进行C++开发,确保“C++桌面开发”工作负载被选中。

  3. 选择组件 :在安装器的“组件”选项卡中,你可以进一步定制你的安装。选择需要的组件,比如不同版本的MSVC编译器、不同的C++标准支持、特定的库等。

  4. 安装位置 :如果需要,你可以更改Visual C++ 2019 Build Tools的安装位置。在“安装位置”选项卡中,点击“浏览”,然后选择新的安装路径。

  5. 修改设置 :在“修改”过程中,点击“修改”按钮,确保安装器下载所有需要的文件,并按照你选择的配置进行安装。

5.2.2 配置完成后如何验证配置结果

配置完成后,验证安装是否成功至关重要。以下是一些验证方法:

  1. 命令行测试 :打开命令提示符,输入 cl (MSVC编译器的命令行接口)。如果出现编译器的帮助信息,那么编译器安装和配置正确。

  2. IDE集成测试 :打开Visual Studio,尝试创建一个新的C++项目。如果可以成功创建并编译项目,说明Visual C++ 2019 Build Tools已经正确集成到Visual Studio IDE中。

  3. 环境变量检查 :在系统属性中检查环境变量,确保Visual C++ 2019 Build Tools的路径被正确添加到了PATH环境变量中。

通过上述验证步骤,可以确保Visual C++ 2019 Build Tools已经正确安装和配置,准备就绪,可以开始进行C++开发工作。

6. 命令行构建与非IDE开发场景

6.1 命令行构建的理解和使用

命令行构建是指使用命令行工具而非集成开发环境(IDE)来编译和链接C++程序的过程。这在许多情况下,如自动化构建、持续集成服务器或需要更细致构建控制的场景中非常有用。

6.1.1 命令行构建的优势和应用场景

命令行构建的优势在于其灵活性和控制能力。开发者可以精确地指定编译和链接过程中的每一个步骤,这在调试构建问题时尤其有价值。它也使得构建过程易于脚本化,有助于自动化和定制化构建流程。

此外,命令行构建可以使用单一的构建脚本来适用于多种环境,这在多平台开发时非常有用。开发者也可以通过构建脚本实现参数化,使得构建过程可以动态调整以适应不同的构建需求。

6.1.2 使用命令行构建的基本步骤和示例

  1. 确保Visual C++ 2019 Build Tools安装后,可以在命令行中访问 cl.exe 编译器和 link.exe 链接器。通常,需要将Visual C++的安装目录下的 bin/Hostx64/x64 添加到系统环境变量 PATH 中。
  2. 创建一个文本文件,命名为 build.bat (Windows平台)或 build.sh (Linux平台),并输入以下命令行示例来构建一个简单的C++程序:

对于Windows: ```batch @echo off SETlocal EnableDelayedExpansion

REM 设置编译器选项 SET COMPILER_FLAGS=/EHsc /W4 /std:c++latest SET LINKER_FLAGS=/OUT:myapp.exe

REM 编译源文件 cl.exe %COMPILER_FLAGS% main.cpp

REM 链接对象文件 link.exe %LINKER_FLAGS% main.obj

REM 结束 ENDlocal ```

对于Linux: ```sh #!/bin/bash

# 设置编译器选项 COMPILER_FLAGS="-Wall -std=c++17" LINKER_FLAGS="-o myapp"

# 编译源文件 g++ $COMPILER_FLAGS main.cpp -c

# 链接对象文件 g++ $LINKER_FLAGS main.o

# 运行程序(仅限Linux) ./myapp ```

  1. main.cpp 源文件放在同一目录下。

  2. 双击或运行 build.bat (Windows)或 ./build.sh (Linux)文件,这将编译并链接程序,生成可执行文件。

  3. 运行生成的可执行文件 myapp.exe (Windows)或 ./myapp (Linux)。

通过这种方式,开发者可以快速开始使用命令行来构建项目,同时为自动化构建流程奠定基础。

6.2 非IDE开发的场景和优势

在某些特定开发场景下,非集成开发环境(非IDE)的开发方式具有其独到的优势,主要体现在以下几个方面:

6.2.1 非IDE开发的场景和优势

  1. 资源占用 :非IDE方式可以显著减少开发环境对计算机资源的占用,特别是内存和CPU的占用。这在资源受限的开发环境,如嵌入式系统开发或远程服务器上尤其重要。

  2. 定制化构建 :开发者可以根据个人习惯和项目需求定制化构建脚本,实现快速和灵活的构建过程,而不受IDE固定操作流程的限制。

  3. 自动化和脚本化 :命令行构建易于集成到构建系统(如Jenkins, TeamCity, GitLab CI等)中,实现自动化的编译、测试、打包和部署流程。

  4. 多平台和跨平台开发 :对于需要在多个操作系统平台上进行开发的项目,命令行工具通常提供跨平台的支持,使开发者可以在不同的操作系统上进行项目构建和管理。

6.2.2 如何在非IDE环境中使用Visual C++ 2019 Build Tools

要在非IDE环境中使用Visual C++ 2019 Build Tools,可以按照以下步骤操作:

  1. 配置环境 :首先确保系统路径( PATH 环境变量)中包含了Visual C++ 2019 Build Tools的 bin 目录。这一步通常在安装工具的时候已经完成。

  2. 使用 cl.exe link.exe :在命令行中直接使用 cl.exe 来进行编译,用 link.exe 来进行链接。 cl.exe 是Microsoft C++编译器的命令行接口,可以通过命令行参数来控制编译过程。

  3. 编写构建脚本 :创建构建脚本(例如 build.bat build.sh ),并在脚本中编写使用 cl.exe 编译源代码文件,使用 link.exe 链接生成的对象文件。

  4. 集成版本控制工具 :将构建脚本和源代码文件纳入版本控制系统(如Git),这样可以跟踪每次的构建历史,便于回溯和管理。

  5. 自动化构建 :根据实际需要,将构建脚本集成到持续集成/持续部署(CI/CD)系统中,如Jenkins、Azure DevOps、Travis CI等,以实现自动化构建和部署。

通过遵循上述步骤,开发者能够在没有IDE干扰的情况下,专注于代码本身,并保持构建过程的高效和可控。

7. 实践应用:创建与构建项目

7.1 创建一个新的C++项目

7.1.1 创建项目的基本步骤和示例

创建一个新的C++项目通常涉及选择合适的项目模板,配置项目属性,以及编写或集成代码。以下是使用Visual Studio创建控制台应用程序的基本步骤:

  1. 打开Visual Studio 2019。
  2. 选择“创建新项目”。
  3. 在“创建新项目”窗口中选择C++的“控制台应用”项目模板。
  4. 输入项目名称、位置等信息,并点击“创建”。

项目创建后,你将得到一个默认的 main.cpp 文件和基本的项目结构。

#include <iostream>

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

7.1.2 创建项目时的常见问题及解决方法

在创建项目时,可能会遇到以下问题:

  • 缺少必要的组件 :确保安装了Visual C++ 2019 Build Tools,并且正确安装了所有必要的组件,特别是针对所选项目的模板。

  • 权限问题 :如果在创建项目时遇到权限问题,尝试以管理员身份运行Visual Studio。

  • 路径包含特殊字符 :避免在项目名称或路径中使用特殊字符和空格,这可能会导致编译错误。

7.2 构建并运行C++项目

7.2.1 构建项目的步骤和示例

构建项目是指编译源代码文件,生成可执行文件的过程。Visual Studio提供了方便的构建工具:

  1. 打开你的C++项目。
  2. 在菜单栏选择“生成”菜单。
  3. 点击“生成解决方案”选项,编译所有项目文件。

在解决方案资源管理器中,你也可以右键点击项目,选择“生成”来构建项目。

构建完成后,输出窗口会显示编译过程的详细信息。

7.2.2 运行项目的步骤和示例

构建成功后,运行项目是执行可执行文件的过程:

  1. 在Visual Studio中,点击工具栏上的“开始调试”按钮或按下 F5 键。
  2. Visual Studio将会构建项目(如果需要),并运行生成的程序。

对于控制台应用程序,你将看到一个控制台窗口弹出,并显示程序的输出。

Hello, World!

7.2.3 构建失败时的问题排查

如果构建失败,可以通过以下步骤来排查问题:

  • 查看错误列表 :构建错误会被列在错误列表窗口中,双击错误信息可以定位到代码中的问题位置。

  • 使用诊断工具 :Visual Studio提供诊断工具来帮助分析构建过程中的性能问题。

  • 检查构建日志 :详细查看输出窗口中的构建日志,找到编译错误或警告的详细信息。

在解决构建问题时,理解构建过程和编译器的输出是关键。根据错误提示逐步定位并解决问题,直到成功构建项目。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:Visual Studio Build Tools中的Visual C++ 2019 Build Tools是针对C++开发的关键组件,提供了编译和构建项目的轻量级解决方案。本文详细介绍了Visual C++ 2019 Build Tools的核心组件,如MSVC编译器、C++运行时库、Windows SDK等,以及如何进行安装配置、使用场景、实践应用和最佳实践。通过本文的学习,读者将能够掌握如何使用Build Tools进行高效开发,特别是在命令行构建、非IDE开发、单独构建组件等方面。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

### Visual C++ 2019 开发环境配置和使用教程 #### 安装Visual Studio 2019并选择工作负载 为了开始使用Visual C++ 2019进行开发,首先需要下载并安装Visual Studio 2019。在安装过程中,可以选择特定的工作负载来定制安装的内容。对于C++开发而言,建议选择“使用C++的桌面开发”这一选项[^1]。 #### 启动Visual Studio 2019 完成安装之后,可以通过按下Windows键,在搜索框内输入`visual studio`以查找已安装的应用程序,并点击打开它。首次启动时可能会被要求登录微软账户;如果不立即登录,则可选择跳过此步操作[^3]。 #### 设置个人偏好 进入IDE后,可以根据喜好调整界面的颜色主题等设置,随后点击按钮确认这些更改以便正式开启编程之旅。 #### 创建新的C++项目 当一切准备就绪以后,就可以创建一个新的C++工程了。这一步骤通常涉及指定项目的类型(比如控制台应用程序)、命名以及设定保存路径等内容。值得注意的是,文件扩展名的选择会影响编译方式——`.c`表示遵循C标准而`.cpp`则对应于C++语法解析[^4]。 #### 编写简单的测试代码 作为入门练习的一部分,可以在新建立的源码文件(main.cpp)里加入一段基础的HelloWorld程序用于验证环境是否正常运作: ```cpp #include <iostream> int main() { std::cout << "Hello, world!" << std::endl; return 0; } ``` 接着通过组合键`Ctrl+F5`执行该程序而不启用调试模式,观察输出窗口中的消息以检验整个流程的成功与否[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值