【在主画面加入捷径】
       
【选择语系】
繁中 简中

[C 语言] 程序设计教学:在 Windows 下写 C 程序

【赞助商连结】

    如果要在 Windows 下写 C 程序,通常会得到三种答案:

    • 装 Visual Studio
    • 装 Cygwin
    • 装 MinGW

    这三种情形各有利弊,我们会在本文中说明。

    使用 Visual Studio 中的 Visual C++

    对于初学者来说,装 Visual Studio 无疑是最快的。装好 Visual Studio 后,立即得到完整的 IDE 和编译器,不用太烦心其他的工具,马上就可以开始撰写 C 程序代码,也不太需要懂命令行环境。早期的 Visual Studio Express 虽然免费,但限制较多,那时候在大专院校里就流行用 Dev-C++ 来取代 Visual Studio Express;现在的 Visual Studio Community 功能够完整了,再加上 Dev-C++ 长年未更新,一时间内其实没有更好的选择。

    但 Visual Studio 本身并不是没有问题,像是 Visual C++ 内附的编译器对 C 标准支援相对落后且短期内可能不会改善;而且 Visual C++ 允许 void main() 等非标准的写法,某种程度也有误导新手的嫌疑。Visual Studio 默认使用 MSBuild 等特制的项目管理工具,也会让学习者以为一定要在这个 IDE 中才能写程序,但项目其实可用 make(1) 或 CMake 来管理,和 IDE 脱勾。不过,对大专院校学生来说,如果只用到 ANSI C 的语法和标准函式库,这些细节其实无关紧要。

    附带一提,Visual Studio 2019 在默认情形下无法直接建立 C 项目,只能建 C++ 项目。这篇文章讲解目前的解决方法。

    注意 Cygwin 或 MinGW 的差别

    Cygwin 在 Windows 中加入一个微型的 POSIX 子系统,类 Unix 系统上的 shell 和许多命令行工具都可在这里使用,也支援许多 C API (未详细统计)。基本上,会推荐 Cygwin 的人大概都是类 Unix 系统 (如 GNU/Linux 或 BSD 系统) 玩很久,但需要在 Windows 下工作所做的妥协;对于初学者来说,这个子系统要多花一些时间适应后才会顺手。笔者先前写过一系列相关的文章,需要的读者可看这里

    Cygwin 的问题在于其产生的程序会额外相依于一个 Cygwin 特有的动态函式库,如果没用到 POSIX 的特性,其实这是多余的。有热心的开发者开发了 MinGW 和 MSYS,前者是编译器,后者是微型的 POSIX 环境;这套软件去除了原先 Cygwin 的额外相依性,可用来撰写原生的 Windows 程序。但原本的 MinGW + MSYS 的组合过于阳春,后来又出现 MSYS2 项目,在原本的基础上加入了套件管理的功能,算是补强了 MSYS 的弱点。

    使用 Bash on Windows (Windows 10 限定)

    微软在 Windows 10 中加入 Bash on Windows,基本上,可以把这套软件视为微软版的 Cygwin,另一个 Windows 下的子系统。如同 Cygwin,Bash on Windows 补强原先 Windows 所缺乏的 POSIX 特性,透过这套软件可在 Windows 内安装一些原先在 Windows 内难以安装的开发工具,像是一些高阶语言的延伸模块和一些命令行工具。如果要写原生的 Windows 程序,还是比较推荐先前提及的 MSYS2。

    动手做时间:使用 MinGW (MSYS2) 搭配 Code::Blocks

    综合以上的想法,笔者建议以下的组合 (择一即可):

    • MSYS2 搭配 Code::Blocks
    • MSYS2 搭配 Visual Studio Code

    Code::Blocks 的好处在于本身为跨平台软件,可在 Windows、GNU/Linux、Mac 下执行;此外,Code::Blocks 可选用内建的项目管理程序或 Makefile,对初学者来说,可先用内建的项目管理系统减轻学习的负担,上手后再慢慢转到 Makefile。如果要用 Visual Studio Code,建议学一些基本的 Makefile 撰写方式,简化编译软件的过程。

    接下来,我们用经典的 Hello World 范例来说明如何在 Windows 下撰写 C 语言。使用 IDE 的读者,请建立一个终端机程序的项目,使用编辑器的读者,可建立 hello.c 文件 (也可用其他名称,建议用英文来命名)。我们这里以 Code::Blocks 为例,来展示建立项目过程。

    如果 Code::Blocks 无法抓到 GCC (MinGW) 的路径,需手动修改 GCC 路径 (从 Settings 的 Compiler 菜单选择):

    Code::Blocks 设定编译器路径

    选择项目类型,这里选「Console application」:

    Code::Blocks 选择项目类型

    这里会出现一个额外的提示画面,仅仅是欢迎讯息,直接选 Next 即可:

    Code::Blocks 欢迎讯息

    选择项目语言,记得要选 C,不要选 C++,因为 C++ 并不是 C 的超集合 (superset):

    Code::Blocks 选择项目諨言

    设置项目名称和路径:

    Code::Blocks 设置项目名称和路径

    选择编译器,这里选 GCC 即可:

    Code::Blocks 选择编译器

    进入 Code::Blocks 的编辑器,开始撰写程序:

    Code::Blocks 编辑器主画面

    撰写第一个程序

    我们这里展示 Hello World 程序,暂时不要管程序代码的意义,这里的重点是确保程序可顺利运行:

    #include <stdio.h>
    
    int main()
    {
        printf("Hello World\n");
        
        return 0;
    }

    如果使用 IDE 的读者,选取执行 (Run) 或等效的指令即可执行。如果使用编辑器的读者,可参考以下终端机指令:

    C:\> gcc -o hello hello.c
    C:\> hello
    Hello World

    对于初期的练习,使用上述方法应该足够。但若读者在终端机环境中编译 C 程序代码,久了应该会觉得反覆打指令很费时;我们在这里介绍 GNU Make,这是一个知名的软件编译系统,可以减轻我们的工作量。

    【赞助商连结】