不少人把DOS程序和Console陈旭混为一谈,这是不对的。以下是各方面的比较。
编写方式
在Windows环境下的DOS Box中,或是Windows版本的各种C++编译器套件的集成开发环境(IDE)中,利用Windows编译器、连接器做出来的程序,都是所谓win32程序。如果程序时已main为进入点,调用C runtime函数和“不牵扯GUI”的Win32 API函数,那么就是一个console程序,console窗口将成为其标准输入和输出装置(cin 和 cout)。
过去在DOS环境下开发的程序,称为DOS程序。它也是以main为程序进入点,可以调用C runtime 函数。当然,不可能调用Win32 API函数。
程序功能
过去的DOS程序仍然可以在Windows 的DOS Box中运行(Win95 的兼容性极高,WinNT 的兼容性稍差)。
Console 程序当然更没有问题。由于console 程序可以调用部分的 Win32 API(尤其是 KERNEL32.DLL 模块所提供的那一部分),所有它可以使用WIndows 提供的各种高级功能。 它可以产生进程(processes),产生执行线程(threads)、取得虚拟内存的信息、刺探操作系统的各种数据。但是它不能够有华丽的外表————因为它不能够调用与 GUI 有关的 API 函数。
DOS程序和console程序两者都可以做printf输出 和 cout 输出。也都可以做scanf 出入 和 cin 输入。
可运行文件格式
DOS程序 是所谓的 MZ 格式 (MZ 是 Mark Zbikowski 的缩写,他是DOS 系统的一位主要构建者)。
Comsole 程序的格式则和所有的Win32程序一样,是所谓的PE格式,意思是它可以被拿到任何Win32平台执行。