前言
本來 IDE (整合式開發環境) 的選擇是個人偏好,但 C 和 C++ 的生態圈會和 IDE 起微妙的交互作用,這是因為 C (或 C++) 沒有統一的工具鏈,由各個系統自行負責實作相關工具。在大專院校的資訊相關科系中,C (或 C++) 仍然是大部分學校的必備教學工具;許多學生用習慣了圖形介面軟體,突然要轉向 GCC、Vim、Make 等硬派的命令列工具,往往會水土不服,因此筆者在此介紹一些 IDE 相關的訊息,供需要的讀者參考。
C 和 C++ 生態圈由於歷史因素,很多東西沒有標準化,這在我們前文中有討論過,有興趣的讀者可閱讀筆者先前的文章。理論上,IDE 和語言是分開的,IDE 是在撰寫程式碼的過程中加入一些增加工作效率的工具,在實際編譯程式時其實仍是系統中的編譯器在編譯程式碼。由於 C 和 C++ 的生態圈不像 Java 或 Python 那麼標準化,IDE 在設計時,必需將這些要素考慮進去;因此,不同專案適合的 IDE 可能會有所不同。
Visual Studio
號稱地球上最強的 IDE,微軟的重量級産品。雖然整個生態圈,包括編譯器 (MSVC)、自動編譯工具 (MSBuild)、套件管理 (NuGet 或 vcpkg) 等都和類 Unix 系統上的自由軟體不相容,但微軟的市佔率夠高,倒也自成一套標準。許多函式庫也會附 Visual Studio 可用的專案設定檔,只是自由軟體界的函式庫通常不會有 Visual Studio 專案設定檔,需手動匯入。
Visual Studio 的功能很多,用熟的話撰碼效率很好;但 Visual Studio 最大的問題在於不同版本間的相容性問題,很多舊專案都會刻意守在某個舊版的 Visual Studio,因一旦更新專案版本,就沒辦法自動轉回去。另外,不同版本的 Visual Studio 的函式庫也不完全相容,所以才需要安裝不同版本的可轉散發套件。
Eclipse
Java 社群中相當知名的 IDE,透過 plugins 可支援包括 C 或 C++ 等多種語言,支援 C/C++ 的 plugin 稱為 Eclipse CDT。Eclipse 本身沒有自帶 C 和 C++ 編譯器,但支援 Gygwin 和 MinGW 編譯系統。Eclipse 使用自己特製的專案設定檔。
Netbeans
同樣是 Java 社群中相當知名的 IDE,透過 plugins 可支援 C 或 C++ 等多種語言。Netbeans 本身沒有自帶的編譯器,但支援 Cygwin、MinGW、Clang 等第三方編譯器。Netbeans 會自動生成 Makefile,使用者不同自己寫 Makefile;不過,Netbeans 生成的 Makefile 會引入一些特有的設定,通用性沒有很好。
目前 Windows 上的 Netbeans 8.x 版本有一個小 bug,那就是不能搭配 MSYS2,只能搭配原本的 Msys 或其他的編譯器 (詳見這裡)。
Code::Blocks
Code::Blocks 是一套跨平台的 C、C++、Fortran IDE,本身雖不綁定特定的 C 或 C++ 編譯器,支援許多 C 或 C++ 編譯器,也有附帶 MinGW 的版本。但筆者不建議直接用 Code::Blocks 內附的 MinGW,較建議用 MSYS2,再將編譯器的路徑指向 MSYS2 所在的位置。因 MSYS2 的功能較完整。
CLion
這套 IDE 是 JetBrains 的商業軟體,有在持續維護及更新。CLion 本身不綁定特定的 C 和 C++ 編譯器,但使用 CMake 做為自動化設定檔的格式;JetBrains 的一些使用者希望 CLion 能夠支援 Make,但 JetBrains 因跨平台考量,目前暫不支援 Make。由於 CMake 是最流行的跨平台自動編譯軟體,如果願意花點時間學 CMake,倒是可以考慮使用 CLion。
KDevelop
KDevelop 是 KDE 桌面環境的 IDE,原本運行在 GNU/Linux 等類 Unix 系統,但 Windows 上也有移植品。其實 KDevelop 不算特別強大,但有針對 Visual C++ 和 MinGW 配置設定,也是少數可以直接吃 Make 和 CMake 設定檔的 IDE,如果專案同時需要在 Windows 和 GNU/Linux 等平台間移動的話,可以考慮使用這套 IDE。
不應該再用 Dev-C++ 了
其實 Dev-C++ 不是什麼特別強大的 IDE,但這套 IDE 在大專院校間的流傳程度,己經到了都市傳說的程度;甚至一些早期的中文書籍,也主打 Dev-C++ 程式設計,但書的內容就是很普通的 ANSI C 程式而已。
Dev-C++ 的問題在於這個 IDE 本身有很長一段時間未更新,使用時可能會産生一些怪怪的 bug,但 C 或 C++ 的初學者無法辨識這個 bug 是來自程式碼、IDE 還是編譯器,只是徒增挫折感。早期 Visual C++ Express 限制太多,才會有一些使用者轉而使用 Dev-C++,現在 Visual Studio Community 功能應該很夠了,不一定要堅守這套時代的産物。Dev-C++ 背後使用 MinGW,但使用自己特殊的自動編譯設定檔。
該選那個 IDE?
由於 C 和 C++ 生態圈的多樣性和複雜性,沒有一套 IDE 適用於所有的情境。在專案一開始時,就要想好專案的發佈目標,如果專案發佈目標是 Windows 程式,無疑地,Visual Studio 是最佳解。如果想要讓專案跨平台,就要選擇跨平台的工具,像是 GCC、Make、CMake 等,這時候,使用一個跨平台的 IDE,像是 Code::Blocks 或 CLion 或 KDevelop,可以減少重新學習工具的成本。
對於初學 C 或 C++ 的程式人來說,除了 IDE 本身外,也要考量語言標準。由於 Visual C++ 對 C 標準相對落後,可以考慮 MinGW 搭配一種跨平台 IDE。但學校只用 ANSI C 的話,繼續使用 Visual Studio 也無妨。相對來說,Visual C++ 對 C++ 則支援良好,直接用 Visual Studio 就可以了,除非有其他考量。