2011-03-05 25 views

Respuesta

13
#define NUMBER 10 

creará una cadena de reemplazo que será ejecutado por el preprocesador (es decir, durante la compilación).

float number = 10; 

Creará un flotante en el segmento de datos de su binario y lo inicializará a 10. Es decir. tendrá una dirección y será mutable.

Así escribir

float a = NUMBER; 

será el mismo que escribir

float a = 10; 

mientras que la escritura

float a = number; 

creará una memoria de acceso.

+0

También hay que señalar que poner 'flotar a = 10;' (o lo que sea) dentro de un archivo de cabecera probablemente conducirá a duplicar errores de símbolos cuando se enlaza. Sin embargo, usar un '# define' no lo hará. – trojanfoe

0

"#define" es en realidad una macro preprocesador que se ejecuta antes de que el programa se inicia y es válida para todo el programa

Float es un tipo de datos definido en el interior de un programa/bloque y sólo es válida dentro del programa/bloquear.

+1

"antes de que comience el programa" significa antes de compilarse. –

4

Como dice Philipp, el formulario #define crea un reemplazo en su código en la etapa de preprocesamiento, antes de la compilación. Como el #define no es una variable como number, su definición es difícil de procesar en el ejecutable en tiempo de compilación. Esto es deseable si lo que está replanteando es realmente una constante que no necesita calcularse ni leerse en algún lugar durante el tiempo de ejecución, y que no cambia durante el tiempo de ejecución.

#defines son muy útiles para hacer que su código sea más legible. Supongamos que estaba haciendo cálculos de la física - en lugar de sólo plonking 0.98f en su código en todas partes es necesario utilizar la constante aceleración de la gravedad, se puede definir en un solo lugar y aumenta su legibilidad del código:

#define GRAV_CONSTANT 0.98f 

... 

float finalVelocity = beginVelocity + GRAV_CONSTANT * time; 

EDITAR Sorprendido de volver y encontrar mi respuesta y ver que no mencioné por qué no debe usar #define.

Generalmente, desea evitar #define y usar constantes que son tipos reales, porque #define s no tienen ámbito, y los tipos son beneficiosos tanto para los IDEs como para los compiladores.

Ver también esta pregunta y respuesta aceptada: What is the best way to create constants in Objective-C

Cuestiones relacionadas