usted una trabajos trabajo tengo sobre significa respuestas que porque pone parado para orinar nocturna miembro mejores los les hombres hombre ganas ereccion entrevistas entrevista empresa duro duermen decir cuando con aportaria anteriores amanecen objective-c static compilation objective-c++ redefinition

objective c - una - Definición de miembro estático en objetivo C y objetivo C++



que decir en una entrevista de trabajo sobre trabajos anteriores (1)

Esto se reduce a la diferencia entre C y C ++. En C, está bien redefinir una variable estática con el mismo nombre y el mismo tipo; en C ++, hacer lo mismo es un error.

Del estándar C:

Una declaración de un identificador para un objeto que tiene un alcance de archivo sin un inicializador, y sin un especificador de clase de almacenamiento o con un especificador de clase de almacenamiento estático, constituye una definición tentativa. Si una unidad de traducción contiene una o más definiciones provisionales para un identificador, y la unidad de traducción no contiene definiciones externas para ese identificador, entonces el comportamiento es exactamente como si la unidad de traducción contiene una declaración de alcance de archivo de ese identificador, con el tipo compuesto como del final de la unidad de traducción, con un inicializador igual a 0.

Desde C ++ estándar:

C.1.2, 3.1 Cambio: C ++ no tiene "definiciones tentativas" como en C. Por ejemplo, en el alcance del archivo,

int i ; int i ;

es válido en C, [pero no es] válido en C ++.

En lo que se refiere al Objetivo C, el lenguaje no admite variables con alcance en el nivel de clase; declarando static int mystatic; dentro de un bloque @implementation tiene exactamente el mismo efecto que declararlo fuera del bloque @implementation . Para emular variables de ámbito de clase, use variables estáticas con ámbito de función dentro de métodos de clase.

Tengo una diferencia cuando compilo source-c source y object-c ++ source.

Aquí una declaración de Class1 y Class2 en test.h:

#import <Foundation/Foundation.h> @interface Class1 { } @end @interface Class2 { } @end

Ahora, esta es la implementación de Objective-C en test.m:

#import "test.h" @implementation Class1 /* static member */ static int mystatic; @end @implementation Class2 /* static member */ static int mystatic; @end

Compilo con éxito con este comando:

gcc -arch armv6 -isysroot /Developer/.../iPhoneOS5.0.sdk -x objective-c -c test.m

Ahora uso exactamente este Objective-C ++ implementation test.mm (exactamente la misma fuente):

#import "test.h" @implementation Class1 /* static member */ static int mystatic; @end @implementation Class2 /* static member */ static int mystatic; @end

Y compilar con esta línea de comando (diferencia en la opción -x):

gcc -arch armv6 -isysroot /Developer/.../iPhoneOS5.0.sdk -x objective-c++ -c test.mm

Pero me sale un error:

test.mm:11 error: redefinition if ''int mystatic''

¿Por qué obtengo este error en ObjC ++ y no en ObjC?