Question

J'ai entendu cet objectif-C est un bon de C-ensemble, mais est Objective-C 2.0?

La raison pour laquelle je demande que soit ce n'est pas, ou je mal comprendre l'expression « bonne surensemble », parce que ce code est une syntaxe valide C:

#import <stdio.h>

int main () {
    char *nil = "hello";
    printf("%s\n",nil);
}

Mais ne compile pas en Objective-C 2.0. De toute évidence, cela est un problème facilement réparable, mais j'écris un document, et nous pensons que cela est quelque chose qui devrait être souligné.

Était-ce utile?

La solution

nil n'est pas un mot-clé. nil est définie dans objc.h [Mac OS X] (et __DARWIN_NULL est vraiment juste NULL):

#ifndef nil
#define nil __DARWIN_NULL   /* id of Nil instance */
#endif

C'est, nil est pas vraiment partie de la langue compilé, mais une convention utilisée lors de la compilation qui est perpétué par les bibliothèques système.

couper les cheveux, évidemment. Vous avez vraiment peut compiler la source Objective-C sans nil, cependant.

Il est semblable à demander « Puis-je écrire un outil qui a des variables nommées deflate tout en utilisant l'interface zlib.h? ». Sûr. Mais ce sera laid.

Et, en fait, le compilateur ne comprend pas automatiquement objc.h . Ceci:

#include <stdio.h>

int main() {
    int nil = 5;
    fprintf(stdout, "Hello %d\n", nil);
    return 0;
}

Compile et fonctionne très bien dans un projet d'outils standard (Fondation dans le main.m) une fois que vous supprimez l'en-tête précompilé / préfixe que les importations Fondation et, par conséquent, objc.h. (Donc, oui, hors de la boîte, les modèles Xcode font la cause objc.h à importer par voie d'importation Cocoa/Cocoa.h ou Foundation/Foundation.h.)

Autres conseils

Objective-C, un bon de C-ensemble, comme tout ce qui fonctionne en C travailleront avec Objective-C.

MAIS,

comme il est un surensemble, il ajoute une de nouveaux types, définitions et directives .

Cela signifie que si vous utilisez une définition réservée comme nil, vous obtenez des ennuis sérieux.

Voilà pourquoi le programme ci-dessus ne compile pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top