Какова связь между исходным кодом Objective-C и после Clang -rewrite-objc кода C ++? - PullRequest
2 голосов
/ 16 марта 2019

Когда я пишу некоторый исходный код Objective-C, я могу использовать clang -rewrite-objc FILENAME.m для перевода этого кода в исходный код C ++.Какова взаимосвязь между исходным кодом C ++ и исходным исходным кодом Objective-C?

Objective-C является надмножеством C (но не C ++), так почему Objective-C может быть переведен в C ++, а не в C?Когда код Objective-C компилируется, связывается и выполняется на iOS или macOS, он предварительно компилируется в C ++, затем связывается и так далее?

1 Ответ

1 голос
/ 16 марта 2019

Objective-C может быть переведен в прямую C еще. В API времени выполнения ObjC нет ничего, что требовало бы C ++, хотя внутренности реализованы в C ++ здесь и там. Я не думаю, что это изменилось. Переписчик, однако, может генерировать C ++ просто потому, что это наиболее удобная / эффективная цель для генерации.

В процессе сборки XCode нет шага перевода. Компилирует собственный код Objective-C; то есть ObjC преобразуется прямо во временный формат, который компилятор использует для генерации исполняемых файлов, точно так же, как C ++, C и любой другой язык, который изначально поддерживается компилятором.

Переводчик существует явно, потому что в Visual Studio нет компилятора Objective-C. До переписывания другой компилятор использовался для компиляции кода ObjC в библиотеки в Windows, а затем объединял эти библиотеки с кодом, скомпилированным в Visual Studio, для получения конечных приложений.

Это работало, но отладка была действительно очень сложной, потому что любой стек вызовов, который проходил между двумя стилями генерации кода, не мог быть отлажен из одного отладчика!

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