Oigo con frecuencia que Objective-C es un "superconjunto estricto" del lenguaje de programación C. Hay varios dialectos/estándares de C (es decir, K & R, ANSI C, C90, C99, extensiones de GNU ...); Objective-C se desarrolló por primera vez a principios de la década de 1980, por lo que debe preceder estos estándares. Sin embargo, Objective-C 2.0 es de alrededor de 2006 o 2007, por lo que podría basarse en un dialecto C más moderno. Entonces, ¿cuál "C" es el superconjunto Objective-C a?¿Qué dialecto de C es Objective-C un "superconjunto estricto" de?
Respuesta
Hay una correspondiente "dialecto" de Objective-C para todos los dialectos estándar de C.
Lo que está buscando no está muy definida. El objetivo C generalmente se piensa en un superconjunto estricto de ANSI-C (que es lo mismo que C90). Sin embargo, Objective C no es un lenguaje estandarizado ni nada por el estilo. Su descripción es básicamente "tomar C y agregarle estas características". Por lo tanto, depende del compilador particular que esté utilizando.
Ahora tengo que preguntarme cómo Xcode trata con las estrictas reglas de aliasing C99 al compilar el código Objective-C ... –
@iPhone Developer: nunca he usado Xcode, pero iirc está basado en alguna forma de GCC. Si ese es el caso, entonces debería apoyar cualquiera de los estándares de C subyacentes al objetivo C mismo. –
'@Billy ONeal:' De hecho: http://lists.apple.com/archives/objc-language/2005/Aug/msg00050.html –
Dado que los compiladores de Objective-C utilizados más comúnmente (GCC y Clang) también son compiladores de C, uno imaginaría que son compatibles con el (los) dialecto (s) C soportados por estos compiladores. documentación de Apple establece específicamente:
Los compiladores de Apple se basan en los compiladores de la colección de compiladores de GNU. La sintaxis de Objective-C es un superconjunto de sintaxis GNU C/C++, y el compilador Objective-C funciona para C, C++ y Código fuente Objective-C. El compilador reconoce archivos de origen de Objective-C por la extensión de nombre de archivo .m, del mismo modo que reconoce los archivos que contienen sólo sintaxis estándar de C por nombre de archivo extensión .c. Del mismo modo, el compilador reconoce los archivos C++ que usan Objective-C por la extensión .mm. Otros problemas al utilizar Objective-C con C++ están cubiertos en “Uso de C++ Con Objective-C”
Así que en este caso Objective-C es simplemente considerados como una extensión de cualquiera de los C o C++ compilador dependiendo en el que elige como idioma base.
A partir de Xcode 4.4, el dialecto C parece estar configurado en "GNU99" de manera predeterminada. – zoom23
Según "Learning Objective-C" de Apple:
"Objective-C es un superconjunto de la versión ANSI del lenguaje de programación C y soporta la misma sintaxis básica como C."
- 1. ¿Qué impide que C++ sea un superconjunto estricto de C?
- 2. ¿C es un superconjunto de C?
- 3. ¿La CLI de C++ es un superconjunto de C++?
- 4. Conjunto de caracteres que no es un superconjunto de ASCII
- 5. ¿Qué dialecto de Lisp debo aprender?
- 6. Uso de librerías estáticas C/C++ desde iPhone Aplicaciones ObjectiveC
- 7. ¿FILTER_VALIDATE_URL es demasiado estricto?
- 8. gcc -Wshadow es demasiado estricto?
- 9. ¿Cómo implementar un puente sin cargo en ObjectiveC/C?
- 10. ¿Es posible cambiar el dialecto regexp vim?
- 11. ¿Qué es el "modo estricto" y cómo se usa?
- 12. Dialecto en Hibernate
- 13. ¿Es el mapM en Haskell estricto? ¿Por qué este programa obtiene un desbordamiento de pila?
- 14. Regexes (dialecto .NET): comportamiento extraño de un grupo de captura
- 15. Bloques ObjectiveC equivalente en Java
- 16. ¿La administración de activos es un superconjunto del control de origen?
- 17. ¿Qué dialecto c puede dejar que GCC compile algo de diversión (...)?
- 18. Opciones de GCC para el código C más estricto?
- 19. ¿Cómo escribo un dialecto externo para SQLAlchemy?
- 20. ObjectiveC Parse Integer from String
- 21. ¿Qué es un delegado de C++?
- 22. ¿Qué es un buen compilador de c
- 23. ¿Qué es un buen decompilador de C?
- 24. Función SQL personalizada para el dialecto NHibernate
- 25. Hacer GCC y otros compiladores de C++ Muy estricto
- 26. ¿Qué es un SDK? (C++)
- 27. Are>? o <? operadores legítimos en cualquier dialecto C++?
- 28. Alias de puntero estricto: ¿es el acceso a través de un puntero/referencia 'volátil' una solución?
- 29. ¿Cuándo es seguro * para el alias de puntero estricto?
- 30. objectivec: fb publicar comentario error
+1 por ponerlo mejor que yo :) –
'@Chuck:' ... y algunos de los * dialectos * no estándar * de C! –