Dev C++ 安装配置与使用全指南:从零搭建C/C++开发环境

Dev C++ 安装配置与使用全指南:从零搭建C/C++开发环境

1. 项目概述:为什么是Dev C++?

如果你刚刚踏入C/C++编程的大门,或者正在寻找一个轻量、简单、不折腾的集成开发环境(IDE),那么Dev C++大概率会出现在你的备选清单里。它不像Visual Studio那样功能庞大到让人望而生畏,也不像纯文本编辑器+命令行那样对新手过于“硬核”。Dev C++的定位非常清晰:一个专为教学和个人学习设计的、开源的、免费的C/C++ IDE。它的核心价值在于“快速上手”和“最小化环境配置困扰”,让你能把精力集中在学习编程语言本身,而不是在配置编译器和链接库的泥潭里挣扎。

我见过太多初学者,在安装Visual Studio时被几十GB的下载量和复杂的组件选择搞得晕头转向,或者在配置VSCode的C++环境时,被tasks.jsonlaunch.jsonc_cpp_properties.json这三个配置文件劝退。Dev C++的出现,就是为了解决这个问题。它内置了MinGW编译器(一个Windows下的GCC移植版),安装即用,无需额外配置环境变量。你只需要下载一个安装包,一路“下一步”,就能获得一个完整的、可以编译运行C/C++代码的开发环境。对于数据结构、算法竞赛入门、学校课程作业等场景,Dev C++的简洁高效是无可替代的。

当然,我们必须正视它的局限性。Dev C++的代码编辑功能、调试体验和项目管理能力,与Visual Studio、CLion、甚至配置完善的VSCode相比,存在代差。它更适合小型项目和学习阶段。但正是这种“够用就好”的哲学,让它成为了无数程序员的“初恋”。接下来,我将带你从零开始,完成Dev C++的安装、配置,并分享一些高效使用的核心技巧和避坑指南,让你能真正用好这个经典工具。

2. 环境配置全流程详解

2.1 获取与安装Dev C++

目前,Dev C++最活跃的维护版本是Embarcadero(原Bloodshed Dev-C++的后续分支)发布的版本。避免从一些不明来源的网站下载旧版或捆绑了垃圾软件的版本,是第一步。

步骤一:下载官方安装包访问Embarcadero的GitHub仓库或其官方发布页面,下载最新的安装程序,例如Dev-Cpp 6.3.0 TDM-GCC 10.3.0 Setup.exe。文件名中的“TDM-GCC”指明了它捆绑的编译器版本,这里是GCC 10.3.0,对C++17/20有很好的支持,完全满足入门乃至进阶学习需求。

步骤二:执行安装

  1. 运行安装程序,选择安装语言(通常选英语)。
  2. 在“License Agreement”界面,点击“I Agree”。
  3. 关键步骤:选择组件。这里建议保持默认全选,特别是“Associate C and C++ files with Dev-C++”这一项,勾选后会让.c.cpp文件默认用Dev C++打开,方便日常使用。
  4. 选择安装路径。强烈建议路径中不要包含中文或空格,例如D:\Dev-Cpp。这是为了避免后续编译时可能出现的、因路径解析问题导致的诡异错误。
  5. 点击“Install”开始安装,过程很快。

注意:安装过程中,Windows Defender或第三方杀毒软件可能会弹出警告,提示“TDM-GCC”或某些组件有风险。这是因为编译器本身需要向系统目录写入文件或修改环境变量,属于正常行为。请选择“允许”或“更多信息->仍要运行”。

步骤三:首次运行与基本配置安装完成后,首次启动Dev C++,会提示你选择界面语言和主题。你可以选择“简体中文/Chinese”让界面更友好,主题按个人喜好选择即可。 接下来会有一个编译器配置的自动检测过程,通常它会自动找到捆绑的MinGW,无需手动干预。至此,一个可用的C/C++开发环境就已经搭建完毕了。你可以立刻新建一个文件,写下经典的Hello, World!并运行。

2.2 编译器与调试器配置要点

虽然安装包已经帮我们配置好了大部分内容,但了解其背后的机制,对于排查问题和进行个性化设置至关重要。

理解Dev C++的编译体系Dev C++本身只是一个IDE(集成开发环境),它不负责编译代码。真正的编译工作是由它背后调用的MinGW GCC编译器完成的。Dev C++通过一个名为“编译器集合”的配置来管理这些外部工具。你可以通过菜单栏的“工具(Tools)” -> “编译选项(Compiler Options)”来查看和修改。

在“编译器选项”对话框中,最重要的标签页是“目录(Directories)”:

  • 二进制文件(Binaries):这里指向MinGW的bin目录,例如D:\Dev-Cpp\MinGW64\bin。这里存放着g++.exe(C++编译器)、gcc.exe(C编译器)、gdb.exe(调试器)等核心可执行文件。Dev C++通过系统PATH或这里的设置来找到它们。
  • 库文件(Libraries):指向MinGW的lib目录,存放着系统库文件(如libstdc++)。
  • C包含文件(C Includes)C++包含文件(C++ Includes):分别指向include目录,存放着C标准库和C++标准库的头文件。

对于绝大多数用户,安装程序已经正确设置了这些路径,切勿随意修改,除非你明确知道要添加第三方库(如OpenCV、SDL2)。

启用与配置调试器默认情况下,Dev C++的调试功能可能没有完全启用,或者生成的调试信息不足。为了获得更好的调试体验(设置断点、查看变量值),需要进行以下配置:

  1. 打开编译选项:“工具” -> “编译选项”。
  2. 切换到“代码生成/优化(Code Generation)”标签页(或类似名称,不同版本可能略有差异)
  3. 在“连接器(Linker)”部分,确保勾选了“产生调试信息(Generate debugging information)”。这会在编译时加入-g参数,让生成的可执行文件包含调试符号。
  4. 切换到“编译器(Compiler)”标签页,在“编译时加入以下命令(Add the following commands when calling compiler)”的输入框中,可以加入-g3-g3比默认的-g包含更多调试信息(例如宏定义)。
  5. 点击“确定”保存。

完成上述设置后,当你按F8(编译)或F11(编译并运行)时,生成的就是带有调试信息的可执行文件。此时,你可以使用F5(调试)功能,或者通过“调试(Debug)”菜单进行单步执行、观察变量等操作。

2.3 个性化工作环境设置

一个符合个人习惯的IDE能极大提升编码效率和舒适度。Dev C++虽然古老,但一些基本的个性化设置还是有的。

编辑器外观与字体通过“工具” -> “编辑器选项(Editor Options)”进行设置。

  • 显示(Display):可以设置字体、字号、行距。推荐使用等宽字体,如Consolas、Source Code Pro、JetBrains Mono,字号11-14为宜。
  • 语法高亮(Syntax):可以为不同的代码元素(关键字、注释、字符串等)设置颜色和字体样式。选择一个对比度清晰、长时间观看不费眼的配色方案。
  • 代码补全与符号配对:在“代码补全(Code Completion)”和“符号配对(Auto Paren Matching)”标签页,可以启用或关闭自动补全、括号自动配对等功能。对于新手,建议全部开启,有助于减少语法错误。

项目与文件管理习惯

  • 默认保存路径:在“工具” -> “环境选项(Environment Options)” -> “文件(File)”中,可以设置新建项目和文件的默认保存目录。建议设置为一个有意义的路径,如D:\CppProjects,避免文件散落各处。
  • 创建项目而非单个文件:对于任何超过一个源文件的练习,都强烈建议使用“文件” -> “新建” -> “项目(Project)”。项目文件(.dev)能帮你管理多个源文件、头文件以及编译参数。直接编译单个.cpp文件在涉及多文件时会出现链接错误。

3. 核心功能使用指南与实操

3.1 第一个程序:从Hello World到项目创建

让我们通过一个完整的流程,熟悉Dev C++的核心操作。

创建并运行单个文件

  1. 启动Dev C++,点击“文件(File)” -> “新建(New)” -> “源代码(Source File)”,或直接按Ctrl+N。
  2. 在弹出的编辑器中,输入以下代码:
    #include <iostream> using namespace std; int main() { cout << "Hello, Dev C++!" << endl; return 0; }
  3. 点击“文件” -> “保存(Save)”,或按Ctrl+S。选择一个目录,将文件命名为hello.cpp再次强调,路径和文件名不要有中文和空格
  4. 按F11(编译运行),或者点击工具栏上的“编译运行(Compile & Run)”按钮(一个红色的感叹号)。
  5. 如果代码无误,你会看到一个控制台窗口弹出,显示“Hello, Dev C++!”,程序运行完毕后窗口会关闭。如果代码有语法错误,下方的“编译日志(Compile Log)”窗口会显示具体的错误信息,双击错误行可以快速定位到代码位置。

创建并管理一个项目对于更复杂的学习内容,如使用多个文件、自定义头文件,必须使用项目。

  1. “文件” -> “新建” -> “项目(Project)”。
  2. 在弹出的对话框中,选择“Console Application”(控制台应用程序),并为项目命名,例如MyFirstProject。选择C++项目。
  3. 选择项目的保存路径。
  4. 点击“确定”后,Dev C++会自动为你生成一个包含main.cpp的项目。左侧的“项目管理(Project)”窗口会显示项目结构。
  5. 在项目名称上右键,选择“新建文件(New File)”或“添加文件(Add File)”,可以向项目中添加新的源文件或头文件。
  6. 编译项目时,Dev C++会自动编译项目中的所有源文件并进行链接。只需对项目按F11即可。

3.2 编译、运行与调试实战

编译与运行的几种方式

  • F11 (编译运行):最常用的快捷键。先编译(如果源代码有改动),然后运行生成的可执行文件。
  • F9 (编译):只编译,不运行。用于检查语法错误。
  • Ctrl+F10 (运行):运行上次成功编译后生成的可执行文件,不重新编译。
  • 工具栏按钮:对应上述功能,鼠标操作。

调试功能入门调试是查找程序逻辑错误(Bug)的利器。假设我们有以下有问题的程序,用于计算1到10的和:

#include <iostream> using namespace std; int main() { int sum = 0; for (int i = 1; i < 10; i++) { // 错误:应该是 i <= 10 sum += i; } cout << "Sum from 1 to 10 is: " << sum << endl; // 预期输出55,实际输出45 return 0; }
  1. 设置断点:在怀疑有问题的代码行(例如第6行sum += i;)左侧灰色区域单击,会出现一个红点,这就是断点。程序运行到此处会暂停。
  2. 开始调试:按F5或点击“调试(Debug)” -> “调试(Debug)”。程序开始运行,并在断点处暂停,该行代码会高亮显示。
  3. 单步执行与观察变量
    • F7 (Step Into):单步执行,如果遇到函数调用,会进入函数内部。
    • F8 (Step Over):单步执行,但将函数调用作为一个整体一步执行,不进入其内部。最常用。
    • Ctrl+F7 (Step Out):从当前函数内部跳出,返回到调用它的地方。
    • 在程序暂停时,下方的“调试(Debug)”窗口(可能需要从“视图(View)”菜单中打开)会显示当前函数内的局部变量及其值。你可以观察到isum的变化过程。
  4. 通过单步执行,你会清晰地看到循环在i=9执行最后一次加法后,i++变成10,然后i < 10条件为假,循环结束。i=10并没有被加到sum中,从而发现了错误。

3.3 常用快捷键与效率技巧

熟练使用快捷键能让你编码如飞。以下是一些最核心的Dev C++快捷键:

快捷键功能使用场景
F11编译运行写完代码后立即测试
F9编译只检查语法错误
Ctrl+F10运行快速重新运行程序
F5调试启动调试会话
F8单步跳过 (Step Over)调试时逐行执行,不进入函数
F7单步进入 (Step Into)调试时进入函数内部
Ctrl+F7单步跳出 (Step Out)调试时从函数跳出
Ctrl+N新建文件快速开始编码
Ctrl+S保存文件频繁保存,防止意外丢失
Ctrl+Shift+S全部保存保存所有打开的文件
Ctrl+F查找在当前文件中搜索文本
Ctrl+Shift+F在文件中查找在整个项目或目录中搜索
Ctrl+Z / Ctrl+Y撤销 / 重做代码编辑必备
Ctrl+D复制当前行快速复制一行代码
Ctrl+Shift+上/下箭头移动当前行调整代码顺序
Ctrl+/注释/取消注释行快速注释单行代码
Ctrl+Shift+/注释/取消注释块注释多行代码

效率技巧:

  • 使用代码模板:对于经常写的代码结构(如main函数框架、类定义),可以将其保存为代码模板。通过“工具”->“编辑器选项”->“代码(Code)”标签页进行管理。
  • 项目管理器:善用左侧的项目管理器,可以清晰看到项目结构,右键文件可以进行打开、编译、从项目中移除等操作。
  • 编译日志:编译出错时,不要慌张。仔细阅读“编译日志”窗口中的错误信息。通常第一个错误是最关键的,后面的错误可能是由它引发的连锁反应。双击错误信息可以直接跳转到出错行。

4. 进阶配置与第三方库集成

当你需要超越标准库,使用一些强大的第三方库(例如图形库、数学库)时,就需要手动配置Dev C++。这是从“入门”迈向“实用”的关键一步。

4.1 集成静态库与动态库

第三方库通常以两种形式提供:静态库(.a.lib文件)和动态库(.dll文件及其对应的导入库.dll.a.lib)。配置原理是相通的:告诉编译器头文件在哪,告诉链接器库文件在哪。

以集成一个名为mylib的库为例:假设你将库文件解压到了D:\Libraries\mylib,其目录结构如下:

D:\Libraries\mylib\ ├── include\ (存放头文件 .h) │ └── mylib.h ├── lib\ (存放库文件) │ ├── libmylib.a (静态库,GCC风格) │ └── libmylib.dll.a (动态库的导入库,用于链接) └── bin\ (可能存放运行时需要的 .dll 文件) └── mylib.dll

配置步骤:

  1. 打开编译选项:“工具” -> “编译选项”。
  2. 添加头文件路径:切换到“目录(Directories)”标签页,选择“C++包含文件(C++ Includes)”,点击下方的“...”按钮,添加路径D:\Libraries\mylib\include。这样编译器就能找到#include <mylib.h>了。
  3. 添加库文件路径:在同一个标签页,选择“库文件(Libraries)”,添加路径D:\Libraries\mylib\lib。这样链接器就知道去哪里找.a文件。
  4. 添加链接库:切换到“参数(Parameters)”标签页(或“连接器(Linker)”标签页,取决于版本)。在“连接器(Linker)”的输入框中,添加-lmylib-l是链接器选项,后面跟库名(去掉前缀lib和后缀.a)。例如,libmylib.a就写-lmylib
  5. 处理动态库:如果使用动态库,除了上述步骤,还需要确保程序运行时能找到mylib.dll。有两种方法:
    • mylib.dll复制到你的项目可执行文件(.exe)所在的目录。
    • D:\Libraries\mylib\bin添加到系统的PATH环境变量中。

完成配置后,你就可以在代码中#include <mylib.h>,并调用其中的函数了。

4.2 常用开发库配置示例(以图形库EasyX为例)

EasyX是一个针对C++的简易图形库,在国内许多C语言和C++入门图形编程教学中被广泛使用。它在Dev C++上的配置是一个经典案例。

  1. 下载EasyX:从其官网下载针对Dev C++(即MinGW)的版本。通常是一个.h头文件和一个.a库文件。
  2. 放置文件
    • easyx.h等头文件复制到Dev C++安装目录下的include文件夹,例如D:\Dev-Cpp\MinGW64\include。这是全局配置,所有项目都能用。
    • libeasyx.a库文件复制到Dev C++安装目录下的lib文件夹,例如D:\Dev-Cpp\MinGW64\lib
  3. 链接库:在项目的“编译选项”->“参数”->“连接器”中,添加-leasyx。对于EasyX,可能还需要链接其他图形库,完整的链接参数通常是-leasyx -lgdi32 -lole32
  4. 编写测试代码:新建一个项目,输入以下代码:
    #include <graphics.h> // EasyX的主头文件 #include <conio.h> int main() { initgraph(640, 480); // 初始化一个640x480的图形窗口 circle(320, 240, 100); // 在窗口中心画一个半径为100的圆 getch(); // 按任意键继续 closegraph(); // 关闭图形窗口 return 0; }
  5. 按F11编译运行,如果看到一个画着圆形的窗口,说明配置成功。

实操心得:对于像EasyX这样“绿色”的库,直接复制到MinGW系统目录是最简单的方法。但对于需要多版本管理或更规范的项目,建议采用上一节的方法,为每个库创建独立的目录,并在项目级别配置路径,这样项目更干净,依赖关系更清晰。

4.3 多文件项目管理与编译参数调优

随着项目规模增长,合理的文件组织和编译设置变得重要。

项目文件组织

  • 将源代码(.cpp)放在src文件夹。
  • 将头文件(.h.hpp)放在include文件夹。
  • 在Dev C++的项目管理器中,可以通过右键项目->“添加文件夹(Add Folder)”来映射物理文件夹,保持IDE内视图的整洁。

编译参数调优在“编译选项”的“参数(Parameters)”标签页,我们可以为编译器和链接器添加各种标志。

  • 编译器参数(C++编译器)
    • -std=c++11/-std=c++17:指定使用的C++语言标准。建议使用-std=c++17以启用现代特性。
    • -Wall:开启大部分警告信息。强烈建议开启,编译器警告能帮你发现很多潜在问题。
    • -Wextra:开启额外的警告。
    • -O2:启用二级优化,在发布版本时使用,可以提升程序运行速度。
  • 连接器参数
    • -static:静态链接,将依赖的库都打包进最终的可执行文件,这样生成的.exe文件更大,但可以在没有安装相应运行库的电脑上运行。
    • -mwindows:用于Windows GUI程序(非控制台程序),链接时会省略控制台窗口。如果你用EasyX写图形程序,并且不想看到后面那个黑乎乎的控制台窗口,可以加上这个参数。

一个常见的、对学习者友好的参数组合是:-std=c++17 -Wall -Wextra。它确保你使用现代标准,并且让编译器尽可能多地提醒你代码中的不严谨之处。

5. 常见问题排查与避坑指南

即使环境配置正确,在学习和使用过程中也难免会遇到各种问题。这里汇总了一些典型问题及其解决方案。

5.1 编译与链接错误大全

1. “undefined reference to `WinMain@16'” 错误

  • 问题描述:编译一个应该是控制台程序的项目时,报此链接错误。
  • 原因分析:链接器找不到程序的入口点main函数。这通常是因为你创建了一个“Windows Application”类型的项目,但写的却是控制台程序的main函数。或者,你的main函数拼写错误(如写成了mian)。
  • 解决方案
    1. 检查项目类型。在“项目(Project)” -> “项目属性(Project Options)”中,确保“类型(Type)”是“Console Application”。
    2. 检查main函数的签名是否正确:int main()int main(int argc, char* argv[])

2. “ld returned 1 exit status” 错误

  • 问题描述:这是一个非常笼统的链接错误,通常跟在更具体的错误信息后面。
  • 原因分析:它表示链接过程失败了。根本原因需要看它前面的错误信息。常见原因有:
    • 使用了库函数但未链接对应的库(如数学函数未加-lm)。
    • 函数声明了但未定义(只有头文件,没有实现文件)。
    • 程序的主函数main已经有一个实例在运行(比如上一个编译的程序窗口没关闭)。
  • 解决方案
    1. 仔细阅读“编译日志”中ld returned 1 exit status之前的错误行。
    2. 如果是库函数问题,添加对应的链接参数。
    3. 如果是函数未定义,检查是否包含了正确的源文件到项目中。
    4. 关闭之前运行的程序窗口再重新编译。

3. “cannot find -lxxx” 错误

  • 问题描述:链接器找不到名为libxxx.a的库文件。
  • 原因分析-lxxx链接参数添加了,但链接器在指定的库文件路径下找不到libxxx.a
  • 解决方案
    1. 检查“编译选项”->“目录”->“库文件”中是否添加了正确的路径。
    2. 检查库文件的名字是否正确,GCC风格的静态库通常是libxxx.a,确保-l后面的名字xxx与之匹配。
    3. 检查库文件是否适用于你的编译器(MinGW GCC),而不是VC++的.lib库。

4. 中文乱码问题

  • 问题描述:在控制台输出或从文件读取中文时,显示为乱码。
  • 原因分析:Windows控制台默认使用GBK编码,而Dev C++的源代码文件默认保存为UTF-8 without BOM编码(或其它编码),导致编码不匹配。
  • 解决方案(推荐方案二):
    • 方案一(改源码编码):在Dev C++中,点击“文件”->“另存为(Save As...)”,在对话框底部选择“编码(Encoding)”为“Chinese GB2312(Simplified)”或“ANSI”,然后保存。这样源码文件就是GBK编码,与控制台匹配。但不利于跨平台和现代工具处理。
    • 方案二(改控制台编码,推荐):在程序开头,使用Windows API设置控制台代码页。在main函数最开始加入:
      #include <windows.h> int main() { SetConsoleOutputCP(CP_UTF8); // 设置控制台输出为UTF-8 // 你的代码... }
      同时,确保你的源代码文件保存为UTF-8 without BOM编码(Dev C++默认即是)。这是更现代、更通用的做法。

5.2 运行时异常与调试技巧

1. 程序一闪而过

  • 问题描述:控制台程序运行后,窗口瞬间关闭,看不到输出结果。
  • 原因分析:程序正常执行完毕,自动退出。
  • 解决方案
    1. main函数return 0;前,添加system("pause");语句(需要#include <cstdlib>)。但这会依赖系统命令,不是好习惯。
    2. 使用cin.get();等待用户输入一个字符。
    3. (最佳实践)在Dev C++中,直接按Ctrl+F10运行程序,而不是F11。这样程序运行结束后,控制台窗口会保持打开,并显示“Process exited after ... seconds with return value 0”的提示。这是Dev C++自带的功能,无需修改代码。

2. 调试时变量显示“”或不可用

  • 问题描述:在调试模式下,观察窗口看不到变量的值,或者显示为优化后的值。
  • 原因分析:编译器优化(如-O1, -O2)可能会移除或改变变量,影响调试。或者调试信息生成不完整。
  • 解决方案
    1. 确保按照“2.2 启用与配置调试器”中的步骤,开启了“产生调试信息”并添加了-g-g3参数。
    2. 在调试版本中,避免使用高等级的优化选项。可以在“编译选项”->“代码生成/优化”中,将优化级别设置为“无(No optimization)”。

3. 程序崩溃(段错误)

  • 问题描述:程序运行时突然崩溃,提示“Segmentation fault”或类似信息。
  • 原因分析:通常是访问了非法内存,例如:
    • 解引用空指针或野指针。
    • 数组下标越界。
    • 使用已释放的内存。
  • 排查技巧
    1. 使用调试器:在可能出错的代码行前设置断点,单步执行,观察指针的值和数组索引。
    2. 代码审查:仔细检查所有指针操作和数组访问。对于指针,确保在解引用(*pp->)前进行了有效性判断(if (p != nullptr))。对于数组,确保索引i满足0 <= i < size
    3. 简化问题:如果代码复杂,尝试注释掉部分代码,逐步缩小问题范围。

5.3 性能优化与编码习惯建议

1. 开启编译器警告务必在编译参数中加入-Wall -Wextra。编译器是你的第一道防线,很多潜在的逻辑错误和不良编码习惯都能通过警告发现。把警告当作错误来处理,是写出健壮代码的好习惯。

2. 区分调试版本与发布版本对于稍大的项目,可以创建两个编译配置。

  • 调试配置:参数为-std=c++17 -Wall -Wextra -g3。关闭优化,包含完整调试信息,便于调试。
  • 发布配置:参数为-std=c++17 -O2 -s。开启优化(-O2),剥离调试符号(-s,减小文件体积)。 在Dev C++中,可以通过“执行(Execute)”->“编译参数(Compilation Parameters)”来快速切换,或者通过创建不同的“编译器集合(Compiler Set)”来管理。

3. 养成良好的项目备份习惯Dev C++的项目文件(.dev)有时可能损坏。定期备份你的源代码文件(.cpp,.h)到云盘或其他地方。项目文件可以重新创建,但源代码是无价的。

4. 适时考虑升级工具链当你对C++的理解加深,开始接触现代C++特性(C++14/17/20)、需要更强大的代码分析、重构和调试功能时,Dev C++可能会显得力不从心。这时,可以考虑迁移到更现代的IDE,如:

  • Visual Studio Community:功能极其强大,对Windows开发支持最好,但体积庞大。
  • Visual Studio Code + C/C++扩展:轻量灵活,配置稍复杂,但社区活跃,扩展丰富。
  • CLion:JetBrains出品,跨平台,智能提示和重构功能一流,但属于商业软件。

对于纯粹的初学者和教学环境,Dev C++的简单直接依然是巨大的优势。它让你专注于语言本身,而不是工具。当你用Dev C++打下了坚实的基础,再切换到其他更复杂的IDE时,你会更加清楚自己需要什么,学习曲线也会平缓得多。工具终究是为目的服务的,用顺手的,就是最好的。