Вопрос

Я слышал, что Objective-C-это правильный суперсет C, но Objective-C 2.0?

Причина, по которой я спрашиваю, это либо это не так, либо я неправильно понимаю фразу «правильный суперсет», потому что этот код действителен C Синтаксис:

#import <stdio.h>

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

Но не компилируется в Objective-C 2.0. Очевидно, что это легко исправляемая проблема, но я пишу бумагу и чувствую, что это то, на что следует указать.

Это было полезно?

Решение

nil не ключевое слово. nil определяется в objc.h на Mac OS X] (и __DARWIN_NULL действительно просто NULL):

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

То есть, nil На самом деле не является частью скомпилированного языка, а соглашение, используемое во время компиляции, которая увековечена системными библиотеками.

Расщепление волос, очевидно. Ты настоящий мог компилировать источник Objective-C без nil, хотя.

Это сродни спрашивать: «Могу ли я написать инструмент с названными переменными переменными deflate все еще используя zlib.h Интерфейс? ». Конечно. Но это будет уродливо.

И, на самом деле, Компилятор не включает в себя objc.h. Анкет Этот:

#include <stdio.h>

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

Компилируется и работает просто отлично в стандартном проекте Foundation Tool (в main.m), как только вы удалите предварительный заголовок/префикс, который импортирует Foundation и, следовательно, Objc.H. (Итак, да, из коробки, шаблоны Xcode делать причина objc.h импортируется путем импорта Cocoa/Cocoa.h или же Foundation/Foundation.h.)

Другие советы

Objective-C правильный суперсет C, так как все, что работает в C, будет работать с Objective-C.

НО,

Поскольку это суперсет, он добавляет некоторые Новые типы, определения и директивы.

Это означает, что если вы используете зарезервированное определение, подобное nil, вы попадаете в серьезные проблемы.

Вот почему вышеупомянутая программа не компилируется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top