Pregunta

He oído que Objective-C es un superconjunto adecuado de C, pero ¿es Objective-C 2.0?

La razón por la que pregunto es que no lo es, o no entendí la frase "superconjunto adecuado", porque este código es válido C sintaxis:

#import <stdio.h>

int main () {
    char *nil = "hello";
    printf("%s\n",nil);
}

Pero no se compila en Objective-C 2.0. Obviamente, este es un problema fácilmente reparable, pero estoy escribiendo un artículo, y siento que esto es algo que debe señalarse.

¿Fue útil?

Solución

nil no es una palabra clave. nil se define en objc.h En Mac OS X] (y __DARWIN_NULL es realmente solo NULL):

#ifndef nil
#define nil __DARWIN_NULL   /* id of Nil instance */
#endif

Eso es, nil No es realmente parte del lenguaje compilado, sino una convención utilizada durante la compilación perpetuada por las bibliotecas del sistema.

Dividiendo pelos, obviamente. De verdad pudo compilar la fuente de objetivos-C sin nil, aunque.

Es similar a preguntar "¿Puedo escribir una herramienta que tenga variables nombradas? deflate Mientras sigue usando el zlib.h interfaz? ". Claro. Pero será feo.

Y, de hecho, el El compilador no incluye automáticamente objc.h. Este:

#include <stdio.h>

int main() {
    int nil = 5;
    fprintf(stdout, "Hello %d\n", nil);
    return 0;
}

Se compila y ejecuta bien en un proyecto de herramienta de base estándar (en main.m) una vez que elimina el encabezado precompilado/prefijo que importa base y, por lo tanto, objc.h. (Entonces, sí, fuera de la caja, las plantillas de Xcode hacer causa objc.h ser importado a través de importar Cocoa/Cocoa.h o Foundation/Foundation.h.)

Otros consejos

Objetivo-C Un superconjunto adecuado de C, ya que todo lo que funciona en C funcionará con Objective-C.

PERO,

Como es un superconjunto, agrega algunos Nuevos tipos, definiciones y directivas.

Eso significa que si usa una definición reservada como nil, te estás metiendo en serios problemas.

Es por eso que el programa anterior no se compila.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top