C++ 什么是;Objective-C是C的超集,比C+更严格+&引用;确切的意思是?

C++ 什么是;Objective-C是C的超集,比C+更严格+&引用;确切的意思是?,c++,objective-c,c,C++,Objective C,C,我在那里读到: ObjuleC是C的超集(事实上比C++更严格),因此不会出现向后兼容性问题。在C中可以做的任何事情都可以在Objective-C中完成 超集是二元的,就像怀孕一样。Obj-C是C的超集,C++不是.< 他们所说的超集是什么意思?objective-C以什么方式与C更接近//向后兼容?Objto-C遵循C++哲学的方式比C++ ++? 任何C程序都可以不经objective-C编译器修改而编译(100%兼容性) 这更多的是关于编程语言设计和兼容性的问题,而不是关于哪个更好的问题

我在那里读到:


ObjuleC是C的超集(事实上比C++更严格),因此不会出现向后兼容性问题。在C中可以做的任何事情都可以在Objective-C中完成

超集是二元的,就像怀孕一样。Obj-C是C的超集,C++不是.< 他们所说的超集是什么意思?objective-C以什么方式与C更接近//向后兼容?Objto-C遵循C++哲学的方式比C++ ++? 任何C程序都可以不经objective-C编译器修改而编译(100%兼容性)

这更多的是关于编程语言设计和兼容性的问题,而不是关于哪个更好的问题

  • 他们所说的超集是什么意思

    它们的意思是严格的超集。任何有效的C程序都将使用Objective-C编译器编译。一些有效的C程序不会用C++编译器编译。
  • objective-C以什么方式与C更接近//向后兼容

    下面是一个简单的例子:

    int *foo = malloc(12);
    

    编译在C和ObjuleC中,但C++中没有。当然,还有其他例子

  • < Objto-C以什么方式比C ++?

    更接近C++哲学? All-Objective-C是C的严格超集

  • 任何C程序都可以不经objective-C编译器修改而编译(100%兼容性)

  • “Objective-C是C的超集”意味着每个有效的C程序都是有效的Objective-C程序(具有相同的含义)


    虽然有时C++专家不是C++专家,但C是C的超集,这是不准确的,这就是为什么你的引用对这两个词进行了大量的比较。

    从根本上讲,C++被设计成一个“更好的C”,固定设计省略,无论是真实的还是感知的,正如C++的作者都通过了语言。这个设计决定的结果是:<代码> x>代码>是一个有效的C程序,它不能保证在C++编译器处理时,代码> x/COD>将编译,更不用说运行。这些变化涉及到诸如字符串文本(它们变成了

    constchar*
    )、
    void
    指针的赋值、
    enum
    s和整数类型之间的转换等基本构造

    此外,一旦C99出现,使其进入更新的C标准的特征被从更新的C++标准中排除。同样,非常重要的语言特性被忽略了——最显著的是,指定的初始值设定项和可变大小数组


    相反,Objective C被定位为C的超集,要求所有有效的C程序都可以用Objective C编译器编译。

    我准备了一个简单的图表;它不是很漂亮,但希望能让人明白这一点:

      强>红色:< /强> C、C++和ObjuleC(相对较小)中的所有程序集 强>绿色:< /强> C和ObjuleC中有效的所有程序集,但C++中无效(更小) 强>灰色:在目标C和C++中有效的所有程序集,但C(空,据我所知)无效
    • 蓝色:仅在目标C中有效的所有程序集(相对较大)
    • 强>黄色:只在C++(最大)中有效的所有程序集
    有效C程序集(红色和绿色)是有效目标C程序集(蓝色)的严格子集


    Objective C是一组向后兼容的C扩展。这是可能的,因为Objective C功能以两种非常简单的方式进行分隔:

    • 字符
      @
      的使用。此字符当前未在C语言中使用
    • 调用方法的简单语法扩展,
      [obj方法:参数]
      。在C中,方括号用于数组下标,因此这是无效的C语法。基于无效语法的扩展不会更改宿主语言中任何有效内容的含义
    很容易看出,任何使用Objective C扩展的程序都不可能是严格符合ISO C标准的程序,不管它有多简单。此外,根据定义,每个ISO C程序都可以声明为有效的目标C程序。目标C可以很容易地跟踪C99和C11等开发

    P>另一方面,C++不是简单的C扩展;它是一种不同的语言,改变了C++和C的一些句法的意义,它们的关系随着时间的推移而变化。例如,C已经获得了C++中完全不存在的新特性,并且很可能不会进入C++,例如C99可变长度数组。C++不能轻松地拾取新的C特征。 如果你写一个可移植的C程序,它应该同时是一个目标C程序。 但是,需要额外的护理,使它也是一个具有相同含义的C++程序。(这种做法并非闻所未闻,它所需要的方言非正式地称为“干净的C”)


    <>一个C程序的简单例子,它被当作C++处理时,是任何一个C++程序,它使用C++关键字作为标识符,例如<代码>类< /代码>或<代码>虚拟< /代码>。目标C不引入任何保留关键字。它有由
    @
    字符引入的新关键字,如
    @界面

    是的,那就好了。可以说,如果您愿意找出要使用的低级运行时函数,GUI也不需要Objective-C。大部分是哲学性的。+1很好的解释。我认为“C哲学”的问题有点模糊,但大多数观察家可能会同意C的“目标”和ObjC的“目标”确实不同。C的目的是非常接近硬件,同时提供一些有用的可移植性