Windows 求生手冊:選擇 C 或 C++ IDE

PUBLISHED ON JAN 18, 2018 — OPERATING SYSTEM

本來 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) 等都和類 Unix 系統上的自由軟體不相容,但微軟的市佔率夠高,倒也自成一套標準。許多函式庫也會附 Visual Studio 可用的專案設定檔,只是自由軟體界的函式庫通常不會有 Visual Studio 專案設定檔,需手動匯入。

Visual Studio 的功能很多,用熟的話撰碼效率很好;但 Visual Studio 最大的問題在於不同版本間的相容性問題,很多舊專案都會刻意守在某個舊版的 Visual Studio,因一旦更新專案版本,就沒辦法自動轉回去。另外,不同版本的 Visual Studio 的函式庫也不完全相容,所以才需要安裝不同版本的可轉散發套件。

Eclipse

Java 社群中相當知名的 IDE,透過 plugin 可支援包括 C (或 C++) 等多種語言,支援 C/C++ 的 plugin 稱為 Eclipse CDT。本身沒有自帶編譯器,但支援 Gygwin 和 MinGW。Eclipse 使用自己特製的專案設定檔。

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,但使用自己特殊的自動化設定檔。

Code::Block

Code::Block 是一套跨平台的 IDE,本身雖不綁定特定的 C 或 C++ 編譯器,支援許多 C 或 C++ 編譯器,也有附帶 MinGW 的版本。預設情形下,Code::Block 使用自己特殊的自動化設定檔,但也可以用 Makefile 來簡化編譯流程;如果只用 Code::Block 撰寫程式碼,倒不用在意使用那一種自動化設定檔;站在長遠的觀點,學習一下 Make 的使用方式對專案管理會有所幫助。

CLion

這套 IDE 是 JetBrains 的商業軟體,有在持續維護及更新。CLion 本身不綁定特定的 C 和 C++ 編譯器,但使用 CMake 做為自動化設定檔的格式;JetBrains 的一些使用者希望 CLion 能夠支援 Make,但 JetBrains 因跨平台考量,目前暫不支援 Make。如果願意花點時間學 CMake,倒是可以考慮使用這套 IDE。

何者較佳?

由於 C 和 C++ 生態圈的多樣性和複雜性,沒有一套 IDE 適用於所有的情境。在專案一開始時,就要想好專案的目標,如果專案目標是 Windows 程式,無疑地,Visual Studio 是最佳解。如果想要讓專案跨平台,就要選擇適用多種平台的工具,像是 GCC、Makefile 或 CMake 等,這時候,使用一個跨平台的 IDE,像是 Code::Block 或 CLion,可以減少重新學習工具的成本。

TAGS: C, C++, IDE, MINGW, MSYS, WINDOWS
comments powered by Disqus