2011-10-07 20 views
18

Estoy un poco confundido por el "libra si" o la sintaxis #if que veo cuando veo algunas clases.Objetivo C "#if" sintaxis

Por ejemplo:

#if someConstant == someNumber 
    do something 
#elif 
    etc 

frente:

if (someConstant == someNumber) 
    do something 
else if { 
    do more stuff 
} 

cuál es la diferencia, y por qué utilizar #if?

Respuesta

28

#if etc. son directivas de preprocesador. Esto significa que se tratan antes de compilar y no en tiempo de ejecución. Esto puede ser útil, por ejemplo, en la definición de la conducta de depuración que sólo se recopila cuando se genera para debug y no release:

#if DEBUG 
    #define ISRelease(x) [x release] 
#else 
    #define ISRelease(x) [x release], x = nil 
#endif 

(cortesía Código de blog de Jeff LaMarche.)

De esta manera usted no lo hace necesita revisar el código de su aplicación justo antes de enviar su aplicación y eliminar una carga de código de depuración. Este es solo un pequeño ejemplo del uso de estas directivas.

+0

¿Es #if lo mismo que #ifdef ?? –

+0

No - si reemplazó el '# if' anterior con' # ifdef' ("si está definido"), el condicional solo tendrá éxito si 'DEBUG' ya está definido. También hay una directiva de preprocesador '# ifndef' que devuelve el resultado opuesto (" si no está definido "). – Stuart

10

#if es una directiva de preprocesador .

if es un constructo lenguaje.

La diferencia está en la forma en que se compila el programa final. Cuando usa #if, el resultado de esa directiva es lo que el programa final contendrá en esas líneas. Cuando utiliza el constructo de lenguaje, la expresión que se pasa al constructo se evaluará en runtime, y no en tiempo de compilación.

0

Las respuestas anteriores cubren #if usos de la depuración a la terminología y se pierda uno más de uso común: #if se utiliza para comentar grandes porciones de código. Esto es útil cuando los programadores necesitan deshacerse de algo que ya contiene comentarios.

#if 0 
    a lof of C code with /* style */ comments included 
#endif 

Uso mucho este. Ventaja sobre cualquier otro #if y estilo de comentario; realmente no le importa la mayor parte de la sintaxis quebrantada dentro de él.