Подтвердить что ты не робот

Статический, внешний и встроенный в Objective-C

Что означают static, extern и inline (и их комбинации) в Objetive-C с использованием компилятора LLVM?

Кроме того, я заметил, что есть макросы CG_EXTERN и CG_INLINE. Должны ли мы использовать их вместо этого?

(Я не мог найти источник с ясным объяснением, поэтому я подумал, что было бы полезно создать его здесь или указать на него, если кто-то знает его)

4b9b3361

Ответ 1

Что означают статические, внешние и встроенные (и их комбинации) в Objetive-C с использованием компилятора LLVM?

То же, что и в C, если вы не компилируете как ObjС++ - тогда они означают то же, что и в С++.

Итак, вот введение для C, но прочитайте ссылки, если вы готовы их использовать, потому что важны детали:


Экстерн

Сводка: указывает, что идентификатор определен в другом месте.

Подробности: http://tigcc.ticalc.org/doc/keywords.html#extern

Static

Сводка (значение): Сохраняет значение переменной, чтобы выжить после завершения ее области.

Сводка (функция): Эффективно испускает неназванные копии - полезно для частных функций в C и может использоваться для устранения нескольких ошибок определения при использовании с встроенными функциями.

Подробности: http://tigcc.ticalc.org/doc/keywords.html#static

Инлайн

Сводка: предполагает, что тело функции должно быть перемещено в вызывающих абонентов.

Подробности: http://tigcc.ticalc.org/doc/gnuexts.html#SEC93


Обратите внимание, что inline и static довольно сложны в С++ (например, почти все на С++).

Я также обнаружил, что есть макросы CG_EXTERN и CG_INLINE. Должны ли мы использовать их вместо этого?

Нет.

Вместо этого вы должны указать свой собственный, с собственными значениями, если вам нужен этот тип функциональности. CG_EXTERN и CG_INLINE имеют определенные значения (которые могут меняться) и предназначены для использования в определенном контексте - также вы не хотите включать в себя целый ряд фреймворков (все CoreGraphics/ApplicationServices/CoreFoundation/etc.), Когда вы хотите указать что-то, это extern таким образом, который работает в C и С++.

Ответ 2

Джастин покрыл большую часть этого, но я нашел несколько других хороших ресурсов для тех, кто хочет копать глубже:

Объявив функцию inline, вы сообщите компилятору, чтобы он заменил полный код этой функции непосредственно на место, откуда он был вызван. Это довольно продвинутая функция, которая требует понимания программирования нижнего уровня.

Встроенные функции


Этот вопрос SO имеет огромный ответ о переменных extern - переменные, определенные "где-то в другом месте", - но их нужно также использовать "здесь".


Статический сохраняет переменную жизнь за пределами видимости. Переменная видима в пределах области, которую она объявила.

Что означает статическая переменная?