6

我很好奇有多少依赖于标准 Unix 功能的 C 功能可以在 Mac OS System 7 到 OS 9 上运行。我没有任何平台开发经验,但我知道标准没有命令行,也没有任何地方流工作。没有命令行是否有任何命令行参数?环境变量呢?

我确实尝试过寻找经典的 Mac OS 编程指南,但它们出奇地难找。

4

2 回答 2

13

首先,没有依赖于 Unix 的 C 特性。C 在 Windows 上运行良好,在 8 位微控制器上运行良好。

至于经典的 Mac OS,有两个主要的编程环境:Metrowerks CodeWarrior 和 Apple 的 MPW。

  1. CodeWarrior 带有一个名为 SIOUX 的库,它打开一个窗口并提供简单的 I/O。任何printf语句都将打印到此窗口。没有管道或插座,但这不是 C 标准的一部分(管道是 POSIX 的一部分)。使用 SIOUX,您可以将一个简单的程序移植到 Mac OS,只要它坚持可移植的 C。

  2. 苹果的 MPW 是另一种选择。MPW 提供了一个命令行、一组命令行程序(C、C++、Pascal、汇编的编译器)和用于为程序生成命令行参数的对话框“shell”。你甚至可以使用管道、设置环境变量等等。

    但是,Unix 和 MPW 之间的功能存在一些重大差异。MPW 有一个很棒的界面,但是你不能同时运行两个命令行程序,即使是在一个被挂起来运行另一个的非常微不足道的情况下也是如此。这意味着“make”程序无法运行编译器。相反,“make”生成了一个运行编译器的 shell 脚本。您通常会使用某种键盘快捷键来运行“make”,然后将生成的输出作为 shell 脚本运行。

    现在,这似乎暗示管道不起作用,但我认为管道只是处理临时文件的语法糖。

    据我所知,Xcode 没有 MPW 遗产。Xcode 源自于 NeXT 开发的 Project Builder,而 NeXT 始终是 Unix。Apple 将一些旧的 MPW 命令行工具移植到 OS X,但数量不多。最大的是Rez(和DeRez)。由于它们附带最新的 Xcode,我猜可能有人仍在使用它们。Rez 的头文件仍然存在,从过去的检查中得到一个爆炸:

    find /System/Library/Frameworks -name '*.r'
    

似乎 Apple 真的清除了他们的开发网站上的任何早于 10.6 的内容,这有点可惜。不久前,您仍然可以在 Apple 网站上找到旧的 pre-Carbon 文档,包括所有“Inside Macintosh”系列。您以前也可以从 Apple 的 FTP 站点获得 MPW(它是免费的),我仍然有下载,但我不知道您是否仍然可以下载它。

请注意,您需要 10.4(或更早版本)和 PowerPC 计算机才能考虑使用它,除非您设法让 Sheep Shaver 工作。

有趣的花絮,MPW 的 C 编译器可能会产生一些有趣的错误消息。

在你程序的这一点上,一个 typedef 名称对我来说是一个完全的惊喜

您不能修改常量、上游浮动、赢得 IRS 的参数或满足此编译器

......而领主说,'看,在 switch 语句中只能有大小写或默认标签'

输入(强制转换)必须是标量;ANSI 3.3.4;第 39 页,第 10-11 行(我知道你不在乎,我只是想惹你生气)

称我为偏执狂,但在此评论中发现“/*”让我怀疑

符号表已满 - 致命的堆错误;请从您当地的 Apple 经销商处购买 RAM 升级

一行错误太多(减少)

此标签是包含此标签的块外部的 goto 目标,并且此块有一个带有初始化程序的自动变量,并且您的窗口不够宽,无法读取整个错误消息

我们已经做了这个功能
于 2012-11-19T23:25:20.260 回答
4

THINK C/Symantec C 也有一个标准的 I/O 窗口,使移植命令行程序相对容易。程序参数是通过对话框输入的。

但是最好的方法是使用 MPW - Macintosh Programmer's Workshop。对于 MacOS 来说,这是一个非常好的命令行环境、出色的编辑器、可编写脚本、各种“工具”以及内置的许多有用的 GUI 方面(因此它真正类似于 Mac)。

多年来,这可以从 Apple 的开发者网站免费下载。看起来链接现在可能已经消失了,但我确信可以通过一些搜索在网上找到一个副本。(尝试搜索 MPW-GM.img.bin 或 mpw-gm_images。)

于 2012-11-20T00:08:16.560 回答