87 votes

Ce n' "Objective-C est un sur-ensemble de C plus strictement que C++" signifie exactement?

De ce que j'ai lu il y a: Pourquoi est-Objective-C n'est pas très populaire à l'extérieur de la Pomme de la communauté?

Objective-C est un sur-ensemble de C (ce qui est beaucoup plus stricte qu'en C++, en fait) de sorte que la question de la compatibilité descendante ne se pose pas. Tout ce que vous pouvez le faire en C, vous pouvez le faire en Objective-C.

Être un sur-ensemble est binaire, comme le fait d'être enceinte. Obj-C est un sur-ensemble de C, et C++ n'est pas.

Que veulent-ils dire par la surcouche? En quoi l'objective-C serait plus proche//compatible en amont, à C? En quoi l'objective-C, suivez la C la philosophie de plus près que le C++?

Peut-programme C être compilé sans modification par un objectif-compilateur C (compatibilité à 100%)?

C'est plus une question à propos du langage de programmation, de conception et de compatibilité que les guerres sur lequel est le mieux.

133voto

Escualo Points 12584

J'ai préparé un schéma simple; il n'est pas très jolie, mais j'espère obtient le point à travers:

  • Rouge: l'ensemble de tous les programmes valide en C, C++ et Objective-C (relativement faible)
  • Vert: l'ensemble de tous les programmes valide en C et Objective-C, mais pas en C++ (même les petits)
  • Gris: l'ensemble de tous les programmes valide en Objective-C, C++, mais pas dans C (vide, autant que je sache)
  • Bleu: l'ensemble de tous les programmes valable uniquement en Objective-C (relativement important)
  • Jaune: l'ensemble de tous les programmes valable uniquement en C++ (la plus grande)

La validité des programmes en C (en rouge et en vert) est un sous-ensemble strict de l'ensemble de l'Objectif valide les programmes en C (bleu)

enter image description here

62voto

Carl Norum Points 114072
  1. Que veulent-ils dire par la surcouche?

    Ils signifient stricte sur-ensemble. Pour être valable, toute programme C compiler avec un Objectif-C compilateur. Certains valide les programmes en C ne peut pas se compiler avec un compilateur C++.

  2. En quoi l'objective-C serait plus proche//compatible en amont, à C?

    Voici un exemple simple:

    int *foo = malloc(12);
    

    Compile en C et Objective-C, mais pas en C++. Il y a, bien sûr, d'autres exemples.

  3. En quoi l'objective-C, suivez la C la philosophie de plus près que le C++?

    Tous - Objective-C est un sur-ensemble strict de C.

  4. Peut-programme C être compilé sans modification par un objectif-compilateur C (compatibilité à 100%)?

    Oui.

31voto

dasblinkenlight Points 264350

À partir de la base, C++ a été conçu comme un "mieux C", la fixation de la conception des omissions, à la fois réels et imaginaires, comme les auteurs de C++ est allé par le biais de la langue. Le résultat de cette décision de conception a été qu' X être valide d'un programme C ne garantit pas qu' X de dresser, sans parler de l'exécuter, lorsqu'elle est traitée par le compilateur C++. Les changements ont touché ces constructions de base comme des littéraux de chaîne (ils sont devenus const char*), l'attribution de void des pointeurs, des conversions enums et les types intégraux, la sémantique du composé opérateurs d'affectation, et ainsi de suite.

En outre, une fois que le C99 est venu le long, des caractéristiques qui en a fait la mise à jour de C standard ont été laissés de côté à partir de la mise à jour de C++ standard. Encore une fois, très important de fonctionnalités de langage ont été laissés de côté, notamment, désigné initialiseurs et un tableau de taille variable.

En revanche, Objective-C a été positionné comme un sur-ensemble de C, exigeant que tous les valide les programmes en C pour être compilable avec un Objectif C compilateur.

12voto

Steve Jessop Points 166970

Objective-C est un sur-ensemble de C" signifie que chaque valides programme C est un Objectif valable-programme C (avec le même sens).

Il est parfois dit, bien que n'étant pas en C++ experts, que le C++ est un sur-ensemble de C. Ce n'est pas exacte, c'est pourquoi votre offre est de faire une grosse affaire de comparer les deux.

9voto

Kaz Points 18072

Objective-C est un ensemble de vers l'arrière-compatible avec les extensions de C. Cela est possible parce que l'Objective-C caractéristiques sont séparées en deux façons très simples:

  • utiliser le caractère @. Ce personnage n'est pas actuellement utilisé dans le langage C.
  • une simple extension syntaxique pour l'invocation de méthodes, [obj method:argument]. En C, les crochets sont utilisés d'une façon très spécifique pour les indices de tableaux, et c'est donc invalide C syntaxe. Des Extensions de construire sur la syntaxe non valide ne change pas le sens de tout ce qui est valide dans la langue du pays d'accueil.

Donc facile de voir qu'aucun programme qui l'utilise Objective C les extensions peuvent être strictement conformes ISO programme C, n'importe comment simple. En outre, tous les ISO programme C peut être déclaré, par définition, être un Objectif valable C programme. Objective-C peuvent facilement suivre l'évolution comme C99 et C11.

D'autre part, le C++ n'est pas simplement des extensions de C; il est dans une langue différente qui change la signification de certains de la syntaxe de C++ et de C sont maintenus séparément, et ainsi de leur relation change au fil du temps. Par exemple, C a acquis de nouvelles fonctionnalités qui sont totalement absents en C++, et très probablement ne sera pas aller en C++, comme C99 de longueur variable des tableaux. C++ ne peut pas facilement ramasser de nouveaux C caractéristiques.

Si vous écrivez un portable programme C, il doit être à la fois un Objectif C programme. Mais des soins supplémentaires seront nécessaires afin qu'il soit aussi un programme en C++ avec la même signification. (Cette pratique n'est pas rare, et le dialecte qu'il requiert est officieusement connu comme "Propre C").

Un exemple trivial d'un programme C qui se brise lorsqu'ils sont traités en tant que C++ est tout un programme C qui utilise C++ mot-clé comme un identificateur, tel qu' class ou virtual. Objective-C n'introduit pas de mots clés réservés. Il a de nouveaux mots clés qui sont introduites par l' @ caractère, comme @interface.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X