C的哪种方言是Objective-C的“严格超集”?

我经常听说Objective-C是C编程语言的“严格超集”。 C有几种方言/标准(即K&R,ANSI C,C90,C99,GNU扩展……); Objective-C最初是在20世纪80年代初开发的,所以它必须先于这些标准。 然而,Objective-C 2.0是从2006年左右开始的,所以它可以基于更现代的C语言。 那么,哪个“C”是Objective-C的超集?

对于C.的所有标准方言,Objective-C都有相应的“方言”。

鉴于最常用的Objective-C编译器(GCC和Clang)也是C编译器,可以想象它们支持这些编译器支持的C语言。 Apple的文档明确指出:

Apple编译器基于GNU Compiler Collection的编译器。 Objective-C语法是GNU C / C ++语法的超集,Objective-C编译器适用于C,C ++和Objective-C源代码。 编译器通过文件扩展名.m识别Objective-C源文件,就像它通过文件扩展名.c识别仅包含标准C语法的文件一样。 类似地,编译器识别扩展名为.mm的使用Objective-C的C ++文件。 将Objective-C与C ++一起使用时的其他问题在“使用带有Objective-C的C ++”中介绍

因此,在这种情况下,Objective-C被简单地视为C或C ++编译器的扩展,具体取决于您选择哪种基本语言。

您正在寻找的内容并未真正定义。 Objective C通常被认为是ANSI-C的严格超集(与C90相同)。 但是,Objective C不是标准化语言或类似的任何东西。 它的描述主要是“Take C,并为它添加这些function”。 因此,它取决于您正在使用的特定编译器。

根据Apple的“ Learning Objective-C ”:

“Objective-C是C语言的ANSI版本的超集,并且支持与C相同的基本语法。”