C++ 编程杂谈之一:编译器
在编程领域中,选择合适的编译器是非常重要的。编译器是把 C++ 代码生成为可执行文件的工具,而不是语言本身。VC(Visual C++)和 BCB(Borland C++ Builder)是两个常用的编译器。
在选择编译器之前,首先需要选择语言,这里假设选择了 C 或 C++。VC 是一个流行的编译器,但它只是一个工具,而不是语言本身。很多人选择 VC 的原因可能是听说的、微软的产品或只是知道这个。然而,VC 并不是最好的编译器,它的商业策略使其成功。
一个编译器究竟带给我们什么?在早期,编译器其实就是一个简单的文本编辑器+库(头)文件+编译程序。现在我们使用的编译器通常称为集成开发环境(IDE),这一类型的开发环境为我们提供了很多东西:方便的开发方式、完善的帮助系统、丰富的库和一些特有的特性。
在 WINDOWS 平台下,我们可以使用 C++ 来编程,剩下的就是平台特性了。WINDOWS 为我们提供了一系列丰富的 API 函数,而且这些函数在不同的 WINDOWS 版本上会略有不同。早期的 WIDNOWS 编译器就是在单纯的 C/C++ 编译器中对平台特性提供支持,并没有提供更多的东西。
真正产生变化的是类库封装的开始。微软提供了 MFC 类库,BORLAND 提供了 OWL 类库。所谓类库就是提供了对 WINDOWS API 的一种封装,相信每个写过 WINDOWS API 程序的人都有一个体会,一个最简单的 WINDOWS 窗口程序都需要几十行代码,这足以令初学者望而却步。
类库的出现正是为了解决这个问题,WINDOWS 类库主要是对 WINDOWS 下的 API 函数进行封装,来达到这样的目的:1)简化我们编程过程中的重复的简单工作(只创建窗口、建立消息环这样的单调工作);2)使我们的工作更符合面向对象的风格。
VC 和 BCB 采用了各自不同的方式(MFC 和 OWL)来封装,大家采用的手段各有所长,很难说哪个更好,唯一让 MFC 占优的应该是操作系统的优势了。相比之下,我个人认为起码在程序生成的环节上,BCB 要好一些。
在 VC 中,如果你为一个通用控件如 CListCtrl 关联一个变量,写过程序的人应该知道,编译器会作为一个类成员变量生成,而在 BCB 中,这个变量是以类成员指针的方式存在的,有什么区别呢?大量的局部变量会造成堆栈的溢出,这也是为什么你无法创建一个 char largest。
选择合适的编译器是非常重要的,它可以影响我们的编程效率和程序的质量。VC 和 BCB 都是常用的编译器,但它们有不同的特性和优势,我们需要根据自己的需求选择合适的编译器。