use*_*057 87 c c++ objective-c
从我在那里读到:为什么Objective-C在Apple社区之外不是很受欢迎?
Objective-C是C的超集(实际上比C++严格得多),因此不会出现向后兼容的问题.您可以在Objective-C中使用C语言执行的任何操作.
作为一个超集是二元的,就像怀孕一样.Obj-C是C的超集,而C++则不是.
超集是什么意思?Objective-C以什么方式更接近//向后兼容C?客观C以什么方式比C++更接近C哲学?
任何C程序都可以编译而不需要通过Objective-C编译器进行修改(100%兼容性)吗?
这是一个关于编程语言设计和兼容性的问题,而不是关于哪一个更好的战争.
Esc*_*alo 133
我准备了一个简单的图表; 它不是很漂亮,但希望得到重点:
有效C程序集(红色和绿色)是有效Objective C程序集的严格子集(蓝色)

Car*_*rum 62
超集是什么意思?
他们的意思是严格的超集.任何有效的C程序都将使用Objective-C编译器进行编译.某些有效的C程序无法使用C++编译器进行编译.
Objective-C以什么方式更接近//向后兼容C?
这是一个简单的例子:
int *foo = malloc(12);
Run Code Online (Sandbox Code Playgroud)
用C和Objective-C编译,但不能用C++编译.当然,还有其他例子.
客观C以什么方式比C++更接近C哲学?
全部 - Objective-C是C的严格超集.
任何C程序都可以编译而不需要通过Objective-C编译器进行修改(100%兼容性)吗?
是.
das*_*ght 31
从头开始,C++被设计为"更好的C",修复了设计遗漏,包括真实和感知,因为C++的作者通过了这种语言.这个设计决策的结果是,X作为一个有效的C程序并不保证X在C++编译器处理时会编译,更不用说运行了.这些变化触及了诸如字符串文字(它们变成const char*),void指针赋值,enums和整数类型之间的转换,复合赋值运算符的语义等基本结构.
此外,一旦C99出现,进入更新的C标准的功能被更新的C++标准遗漏了.同样,遗漏了非常重要的语言特征 - 最值得注意的是,指定的初始化器和可变大小的阵列.
相比之下,Objective C被定位为C的超集,要求所有有效的C程序都可以与Objective C编译器进行编译.
Ste*_*sop 12
"Objective-C是C的超集"意味着每个有效的C程序都是有效的Objective-C程序(具有相同的含义).
它有时表示,虽然不是由C++专家认为C++是C的超集,这是不准确的,这就是为什么你报的是使两相比较的一个大问题.
Objective C是一组向后兼容的C扩展.这是可能的,因为Objective C功能以两种非常简单的方式分隔:
@.此字符当前未在C语言中使用.[obj method:argument].在C中,方括号以非常特定的方式用于数组下标,因此这是无效的C语法.基于无效语法构建的扩展不会更改在宿主语言中有效的任何内容的含义.很容易看出,使用Objective C扩展的程序无论多么简单,都不能成为严格符合ISO C的程序.而且,根据定义,每个ISO C程序都可以声明为有效的Objective C程序.Objective C可以轻松地遵循C99和C11等开发.
另一方面,C++不仅仅是对C的扩展; 它是一种不同的语言,它改变了C的一些语法的含义.C++和C是分开维护的,因此它们的关系随着时间的推移而变化.例如,C已经获得了C++中完全不存在的新功能,并且很可能不会进入C++,例如C99可变长度数组.C++无法轻易获得新的C功能.
如果你编写一个可移植的C程序,它应该是Objective C程序的同时.但是需要额外的关注,因此它也是一个具有相同含义的C++程序.(这种做法并非闻所未闻,它所要求的方言被非正式地称为"清洁C").
C程序在被视为C++时中断的一个简单例子是使用C++关键字作为标识符的任何C程序,例如class或virtual.Objective C没有引入任何保留关键字.它具有由@角色引入的新关键字,例如@interface.