¿Cuál sería la diferencia entre decir haciendo esto?Diferencia entre #Define y Float?
#define NUMBER 10
y
float number = 10;
En qué circunstancias debería utilizar uno sobre el otro?
¿Cuál sería la diferencia entre decir haciendo esto?Diferencia entre #Define y Float?
#define NUMBER 10
y
float number = 10;
En qué circunstancias debería utilizar uno sobre el otro?
#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.
"#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.
"antes de que comience el programa" significa antes de compilarse. –
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
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