Estático, externo y en línea en Objective-C


Qué hacer static, extern y inline (y sus combinaciones) significan en Objtive-C usando el compilador LLVM?

También, me di cuenta de que hay CG_EXTERN y CG_INLINE macros. ¿Deberíamos usarlas en su lugar?

(No pude encontrar una fuente con una explicación clara, así que pensé que podría ser útil crear una aquí, o señalarla si alguien conoce una)

Author: hpique, 2012-08-16

2 answers

¿Qué significan static, extern e inline (y sus combinaciones) en Objetive-C usando el compilador LLVM?

Lo mismo que en C, a menos que compile como ObjC++ then entonces significan lo mismo que se encuentra en C++.

Así que aquí hay una introducción para C, pero lea los enlaces si está listo para usarlos porque los detalles son importantes:


Extern

Resumen: Indica que un identificador está definido en otra parte.

Detalles: http://tigcc.ticalc.org/doc/keywords.html#extern

Static

Summary (value): Conserva el valor de la variable para sobrevivir después de que finalice su ámbito.

Summary (function): Emite efectivamente copias sin nombre - útil para funciones privadas en C, y se puede usar para escapar de múltiples errores de definición cuando se usa con funciones en línea.

Detalles: http://tigcc.ticalc.org/doc/keywords.html#static

Inline

Resumen: Sugiere que el cuerpo de una función debe moverse a los llamadores.

Detalles: http://tigcc.ticalc.org/doc/gnuexts.html#SEC93


Tenga en cuenta que en línea y estática son un poco más complejos en C++ (como casi todo en C++).

También encontré que hay macros CG_EXTERN y CG_INLINE. Deberíamos estar usando esos en su lugar?

No.

En su lugar, debe especificar el suyo propio, con sus propios significados, si necesita este tipo de funcionalidad. CG_EXTERN y CG_INLINE tienen significados específicos (que pueden cambiar), y están destinados a ser utilizados en su contexto definido also además, no querrás tener que incluir un puñado de frameworks (todos CoreGraphics/ApplicationServices/CoreFoundation/etc.) cuando se quiere especificar algo es extern de una manera que funciona en C y C++.

 32
Author: justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-16 11:25:16

Justin cubrió la mayor parte, pero encontré algunos otros buenos recursos para aquellos que quieren profundizar:

Al declarar una función inline le dices al compilador que reemplace el código completo de esa función directamente en el lugar desde donde fue llamada. Esta es una característica bastante avanzada que requiere comprensión de la programación de nivel inferior.

Funciones inline


Esta pregunta tiene una respuesta enorme sobre extern variables-variables definidas "en algún otro lugar" - pero deben ser utilizadas también"aquí".


Static preserva la vida de la variable fuera del alcance. La variable es visible dentro del ámbito en el que fue declarada.

¿Qué significa una variable estática?


 5
Author: jake_hetfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:03