Если Objective C является строгим надмножеством C, то почему это не компилируется? - PullRequest
3 голосов
/ 30 марта 2012

Рассмотрим следующий исходный файл, который является (по крайней мере, допустимым) C.

void id() {
}

Я пытаюсь скомпилировать его с gcc -c test.m, но получаю следующую ошибку:

test.m:1: error: ‘id’ redeclared as different kind of symbol
<built-in>:0: error: previous declaration of ‘id’ was here 

Если бы Obj-C был строгим надмножеством, разве это не означало бы, что все действительные программы на C также являются действительными программами Obj-C? Обратите внимание, что я ничего не #import, и я не связываюсь.

Конечно, возможно LLVM (1) делает что-то магическое по умолчанию, или, возможно, это ошибка в нем.

(1): i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (на основе Apple Inc., сборка 5658) (сборка LLVM 2336.1.00)

РЕДАКТИРОВАТЬ : Позвольте мне уточнить этот вопрос - вопрос не о части id, я знаю, что она имеет особое значение. Моя точка зрения заключается в том, что обычно говорят, что Obj-C является строгим надмножеством C. Однако этого не может быть, если у него есть ключевых слов , которые конфликтуют с действительными программами на Си.

Так что либо id не зарезервирован компилятором, либо Obj-C не является строгим надмножеством. Смысл этого вопроса в том, чтобы спросить, в чем дело, или есть что-то очевидное, чего мне не хватает.

Ответы [ 2 ]

5 голосов
/ 30 марта 2012

Superset означает, что он также добавляет некоторые дополнительные функции. Как id в этом случае. Это определенный тип в Objective C. И эти дополнительные функции надмножества всегда заменяют подмножество.

Просто принято употреблять термин строгий суперсет . Вы должны взять его с щепоткой соли!

См. Эти старые сообщения в SO для аналогичного обсуждения

Является ли цель C 2.0 надлежащей надмножествой C?

Какой диалект C является Objective-C "строгим надмножеством"?

0 голосов
/ 30 марта 2012

id - ключевое слово для «любого типа объекта» в ObjectiveC. В Си это, вероятно, то же самое, что написать

void int() {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...