宏突出显示为关键字:pascal

在查看FunkyOverlayWindow的示例代码时,我发现了一个非常有趣的声明:

pascal OSStatus MyHotKeyHandler( EventHandlerCallRef nextHandler, EventRef theEvent, void *userData ); 

在这里, pascal被突出显示为关键字(标准Xcode颜色方案中的粉红色)。 但我发现它是一个宏,有趣的是在文件CarbonCore / ConditionalMacros.h中定义为:

 #define pascal 

那么,它应该做什么(或者是什么)呢? 也许它在过去有一些特殊的用途?

虽然这里的讨论可能不太适合,但如果这与答案有关,那么知道为什么Apple仍在使用Carbon会很有趣。 我没有Carbon的经验,但是这段代码似乎设置了一个键盘事件处理程序,让我想知道是否有任何优于Cocoa方法的优点。 碳不会被彻底清除吗?

在68k Classic Mac OS运行时(例如,在PowerPC x86之前),C和Pascal使用不同的调用约定,因此C应用程序在使用Pascal约定(包括大多数操作系统)调用库时必须声明适当的约定。 该宏在同期编译器中实现(例如,MPW,Metrowerks,Think C)。

在所有较新的运行时以及所有现代编译器中,不再识别关键字,因此ConditionalMacros.h标头将其定义。 该文件中有一些评论可能有助于解释一下 – 如果你是游戏,请仔细阅读。

您遇到了一个调用约定

这里描述了x86的pascal调用约定。

非常有趣的是,它被定义为“无所不知”,您注意到它意味着它不再被使用。 过去在x86-land中很常见,特别是在Microsoft Windows API中,因为处理器能够在调用结束时使用特殊的RET n指令从堆栈中删除参数。 具有pascal调用约定的函数有时是有利的,因为调用者在每次调用返回后都没有明确调整堆栈指针。

如果有人更多地了解宏为什么仍然存在于代码库中,但是被定义了并且给出了更好的答案,我将很乐意撤回这个。