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

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

【赞助商连结】

    由于 Mac 是以 BSD 系统为基础修改而成的系统,在使用者体验上接近其他的类 Unix 系统。本文介绍如何在 Mac 下写 C 程序。

    在 Mac 下写 C 程序大概有三种方式:

    • 使用 Xcode
    • 使用 Code::Blocks (或其他第三方 IDE)
    • 使用 Visual Studio Code (或其他编辑器)

    使用 Xcode 写 C 程序的相关议题

    如果要用 Xcode 写程序,当然要装 Xcode,但如果没有要用整套 Xcode IDE,只想用其内附的 C 编译器等开发工具,苹果将这些命令行工具独立出来,只要安装 Command Line Tools for Xcode 即可。另外,由于 Mac 本身缺乏套件管理程序,不论用什么方案写程序,通常会安装 HomebrewMacPorts 等第三方套件管理程序,这些套件管理程序可以用来装第三方 C函数库和其他软件。笔者目前使用 Homebrew,读者可依自身喜好选择。

    要注意在 Mac 中,默认是使用 Clang 而非 GCC,虽然 Clang 在一些地方的确比 GCC 好,而且一部分参数刻意和 GCC 兼容,但这两者还是不一样的软件,像是目前 Clang 尚未支援 OpenMP。如果要使用 GCC,先装 Xcode 中的 clang,再用 Clang 从源代码重新编译并安装 GCC,之后再修改 PATH 变量,将 GCC 的顺位向前移即可。由于 GCC 是一个比较庞大的软件,编译时间较久,可以先去喝个咖啡或做一下其他的事情。

    如果要用 Xcode 写 C 程序,不是每种项目类型都支援 C 语言,要视项目类型而定。以 Xcode 9.2 来说,在「macOS」类下的「Command-Line Tool」可用 C 来写终端机程序,而同类下的「Library」类,可用 C 来写函式库。Xcode 默认用自制的项目管理软件,但必要时也可以用 Makefile 等其他外部项目管理软件。

    使用其他的编辑器或 IDE

    如果使用 Code::Blocks 或其他 IDE,由于各个 IDE 会有自己的项目名称,笔者无法在此一一罗列。大概的原则就是选「Console Application」等有关终端机程序的项目类型,语言要选 C,不要选 C++,因为 C++ 不是 C 的超集合。C 语言要写 GUI (图形接口) 程序的程序代码行数较多,需要外部函式库;而且 GUI 程序要处理输出入 (I/O) 较命令进程式麻烦得多,无法像用 Python 等脚本语言搭 Tk 写小型 GUI 程序那么简单,一开始还是要耐着性子写终端机程序。

    动手做时间:使用 Xcode 建立 C 项目

    接下来,我们用经典的 Hello World 范例来说明如何在 Mac 下撰写 C 语言。如果使用 IDE 的读者,请自行建立一个终端机程序类型项目,如果使用编辑器的读者,建立一个档名,像是 hello.c (可取其他档名,建议用英文命名)。我们这里以 Xcode 为例:

    一开始,先选项目类型,这里选「macOS」的「Command-Line Tool」:

    Xcode 选择项目类型

    设置项目的名称:

    Xcode 设置项目名称

    设置项目存放的位置,这里选 Documents (文件) (可选其他位置):

    Xcode 设置项目位置

    进入 Xcode 的编辑器,可以开始撰写程序代码:

    Xcode 编译器

    写第一个程序

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

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

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

    $ gcc -o hello hello.c
    $ ./hello
    Hello World
    

    注:Mac 中的 GCC 默认是指向 Clang 的链接,而非 GNU 的 GCC。

    如果程序顺利执行,代表环境建置成功。若执行失败,则需根据错误讯息来处理。

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