Вы находитесь на странице: 1из 4

EL PREPROCESADOR

Curso Basico de Programacion en C# 3 de Marzo 2012

Concepto de preprocesador
El preprocesador es el mdulo auxiliar

que utiliza el compilador para realizar

estas tareas, y lo que finalmente el

compilador compila es el resultado de

aplicar el preprocesador al fichero de

texto fuente, resultado que tambin es un

fichero de texto.

Directivas de preprocesado

El preprocesador no interpreta de ninguna

manera el cdigo fuente del fichero, sino que

slo interpreta de dicho fichero lo que se

denominan directivas de preprocesado.

Pagina2

Definicin de identificadores

Como ya se ha comentado, la principal utilidad del


Aspectos Lexicos
Lexico es un lenguaje de programacin didctico en
preprocesador en C# es la de permitir determinar cules

regiones de cdigo de un fichero fuente se han de espaol para facilitar el aprendizaje y la enseanza
Permite la suficiente sencillez para entrenarse con
compilar. Para ello, lo que se hace es encerrar las de la programacin orientada a objetos.
los conceptos bsicos en algoritmos para que la
secciones de cdigo opcionales dentro de directivas de
persona practique las estructuras fundamentales en
compilacin condicional, de modo que slo se Las investigaciones realizadas con l as lo han
lgica (secuencia con {....}, decisin con es ? y ciclo
compilarn si determinados identificadores de
comprobado que puede mejorar el desempeo y la
de repeticiones con mientras) y la clsica estructura
preprocesado estn definidos.Lorem ipsum dolor sit
habilidad lgica de los estudiantes pues les permite

Pagina2y3
de representacin de informacin compuesta llamada
experimentar con los algoritmos diseados,[cita
arreglo.
requerida] sin tener que dedicar meses a aprender

Comentarios un lenguaje de produccin que les permita "ver" sus


El centro medular es su orientacin a la
creaciones.
programacin orientada a objetos para lo cual posee
Un comentario es texto que se incluye en el
el soporte apropiado y se ha simplificado al mximo
cdigo fuente para facilitar su lectura a los Su forma exterior es sencilla aunque verstil. El
de manera que ayude a la inmersin en los
programadores y cuyo contenido es, por compilador, disponible en su portal, es distribuible y
conceptos.
defecto, completamente ignorado por el se ejecuta sobre la plataforma .NET de Microsoft.

compilador. Esta ltima tambin es distribuible y soporta las

caractersticas exigidas internacionalmente para

considerarse puro respecto al paradigma. Posee una

Pagina4
interfaz simple que evita dificultades para iniciar.
Concepto de directiva. Sintaxis de estas directivas, ya que se explicarn ms algn error durante el preprocesado

adelante. Lo nico debe saber es que el nombre que


El preprocesador no interpreta de ninguna manera se indica tras el smbolo # es el nombre de la Pero este otro no, pues aunque ocupa una lnea
el cdigo fuente del fichero, sino que slo interpreta directiva, y el texto que se incluye tras l (no todas tiene la sintaxis de los comentarios que pueden
de dicho fichero lo que se denominan directivas de las directivas tienen porqu incluirlo) es el valor que ocupar varias lneas:
preprocesado. Estas directivas son lneas de texto se le da. Por tanto, la sintaxis de una directiva es:
del fichero fuente que se caracterizan porque en #define TEST /* Ha habido
ellas el primer carcter no blanco que aparece es #<nombreDirectiva> algn error durante el preprocesado */
una almohadilla (carcter #) Por ejemplo: <valorDirectiva>

Es posible incluir comentarios en la misma lnea en


#define TEST que se declara una directiva, aunque estos slo
#error Ha habido un error pueden ser comentarios de una lnea que empiecen
fatal con // Por ejemplo, el siguiente comentario es vlido:

No se preocupe ahora si no entiendo el significado #define TEST // Ha habido

Definicin de identificadores de preprocesado

Esta directiva define un identificador de #define PRUEBA


Como ya se ha comentado, la principal utilidad del
preprocesado <nombreIdentificador>.
preprocesador en C# es la de permitir determinar
Aunque ms adelante estudiaremos Por convenio se da a estos

C#
cules regiones de cdigo de un fichero fuente se
detalladamente cules son los identificadores nombres en los que
han de compilar. Para ello, lo que se hace es
nombres vlidos como todas las letras se escriben en
encerrar las secciones de cdigo opcionales dentro
identificadores en C#, por ahora maysculas, como en el ejemplo
de directivas de compilacin condicional, de modo
podemos considerar que son anterior. Aunque es slo un
que slo se compilarn si determinados
vlidos aquellos formados por uno convenio y nada obliga a usarlo, sta
identificadores de preprocesado estn definidos.
o ms caracteres alfanumricos tales ser la nomenclatura que usaremos en
Para definir un identificador de este tipo la directiva
que no sean ni true ni false y no el presente documento ya que es la que
que se usa sigue esta sintaxis:
empiecen con un numero. Por ejemplo, para sigue Microsoft en sus cdigos de ejemplo.

definir un identificador de preprocesado de nombre Conviene familiarizarse con ella porque hay mucho
#define
PRUEBA se hara: cdigo escrito que la usa y porque emplearla
<nombreIdentificador>

de un #define s que existe total libertad para durante la compilacin de un fichero fuente de
facilitar a los dems la lectura de nuestro precederlo de otras directivas de preprocesado. nombre ejemplo.cs:
cdigo ya que es la notacin que esperarn

encontrar. Existe una forma alternativa de definir un csc /d:PRUEBA /d:TRAZA

identificador de preprocesado y que adems permite ejemplo.cs

Es importante sealar que cualquier definicin de que dicha definicin slo sea vlida en una csc /d:PRUEBA,TRAZA

identificador ha de preceder a cualquier aparicin compilacin en concreto. Esta forma consiste en ejemplo.cs

de cdigo en el fichero fuente. Por ejemplo, el pasarle al compilador en su llamada la opcin csc /d:PRUEBA;TRAZA

siguiente cdigo no es vlido puesto que en l antes /d:<nombreIdentificador> (forma abreviada de ejemplo.cs

del #define se ha incluido cdigo fuente (el class A): /define:<nombreIdentificador>), caso en que Ntese en el ejemplo que si queremos definir ms

durante la compilacin se considerar que al de un identificador usando esta tcnica tenemos dos

class A principio de todos los ficheros fuente a compilar se alternativas: incluir varias opciones /d en la llamada

#define PRUEBA encuentra definido el identificador indicado. Las al compilador o definir varios de estos

{} siguientes tres formas de llamar al compilador son identificadores en una misma opcin /d

equivalentes y definen identificadores de separndolos mediante caracteres de coma (,) o

Sin embargo, aunque no pueda haber cdigo antes preprocesado de nombres PRUEBA y TRAZA punto y coma (;)

Page 2
Si se trabaja con Visual Studio.NET en lugar de Eliminacin de identificadores de preprocesado Al igual que ocurra con las directivas #define, no
directamente con el compilador en lnea de se puede incluir cdigo fuente antes de las
comandos, entonces puede conseguir mismo efecto Del mismo modo que es posible definir directivas #undef, sino que, todo lo ms, lo nico

a travs de View Property Pages Configuration identificadores de preprocesado, tambin es posible que podran incluirse antes que ellas seran

Options Build Conditional Compilation eliminar definiciones de este tipo de identificadores directivas de preprocesado.

previamente realizadas. Para ello la directiva que se


Constants, donde nuevamente usado el punto y
usa tiene la siguiente sintaxis:
coma (;) o la coma (,) como separadores, puede

definir varias constantes. Para que todo funcione


#undef
bien, antes de seleccionar View ha de seleccionar
<nombreIdentificador>
en el Solution Explorer (se abre con View Solution

Explorer) el proyecto al que aplicar la definicin de En caso de que se intente eliminar con esta directiva
las constantes. un identificador que no haya sido definido o cuya

definicin ya haya sido eliminada no se producir


Finalmente, respecto al uso de #define slo queda error alguno, sino que simplemente la directiva de
comentar que es posible definir varias veces una eliminacin ser ignorada. El siguiente ejemplo
misma directiva sin que ello provoque ningn tipo muestra un ejemplo de esto en el que el segundo
de error en el compilador, lo que permite que #undef es ignorado:
podamos pasar tantos valores a la opcin /d del

compilador como queramos sin temor a que entren #define VERSION1


en conflicto con identificadores de preprocesado ya #undef VERSION1
incluidos en los fuentes a compilar. #undef VERSION1

Compilacin condicional compilador el <cdigo1>, si no ocurre esto pero se public static void Main()

Como se ha repetido varias veces a lo largo del cumple <condicin2> entonces lo que se pasara al {

tema, la principal utilidad del preprocesador en C# compilador sera <cdigo2>, y as continuamente

es la de permitir la compilacin de cdigo hasta que se llegue a una rama #elif cuya condicin #if PRUEBA

condicional, lo que consiste en slo se cumpla. Si no se cumple ninguna


permitir que se compile determinadas pero hay una rama #else se pasar al

regiones de cdigo fuente si las compilador el <cdigoElse>, pero si Console.Write (Esto es una prueba);

variables de preprocesado definidas dicha rama no existiese entonces no

cumplen alguna condicin se le pasara cdigo alguno y se #if

determinada. Para conseguir esto se continuara preprocesando el cdigo TRAZA

utiliza el siguiente juego de directivas: siguiente al #endif en el fuente

original.

#if Aunque las ramas #else y #eldif son Console.Write( con traza);

<condicin1> opcionales, hay que tener cuidado y

no mezclarlas, ya que la rama #else slo puede #elif

<cdigo1> aparecer como ltima rama del bloque #if...#endif. !TRAZA

#elif <condicin2> Es posible anidar varias estructuras #if...#endif,

como muestra el siguiente cdigo:

<cdigo2> Console.Write( sin traza);

... #define PRUEBA

#else

using System; #endif

<cdigoElse>

#endif class A #endif

El significado de una estructura como esta es que si { }

se cumple <condicin1> entonces se pasa al }


Article 7 Header
escriben son muy cortos y no suelen ocupar ms de
Comentarios
una lnea, C# ofrece una sintaxis alternativa ms

compacta para la escritura este tipo de comentarios


Un comentario es texto que se incluye en el cdigo en las que se considera como indicador del
fuente para facilitar su lectura a los programadores comienzo del comentario la pareja de caracteres //
y cuyo contenido es, por defecto, completamente y como indicador de su final el fin de lnea. Por
ignorado por el compilador. Suelen usarse para tanto, la sintaxis que siguen estos comentarios es:
incluir informacin sobre el autor del cdigo, para

aclarar el significado o el porqu de determinadas // <texto>


secciones de cdigo, para describir el

funcionamiento de los mtodos de las clases, etc. Y un ejemplo de su uso es:

En C# hay dos formas de escribir comentarios. La // Este comentario Palabras reservadas


primera consiste en encerrar todo el texto que se ejemplifica como escribir comentarios abreviados
desee comentar entre caracteres /* y */ siguiendo la de una sola lnea Aunque antes se han dado una serie de
siguiente sintaxis:
restricciones sobre cules son los nombres
Estos comentarios de una sola lnea s que pueden
vlidos que se pueden dar en C# a los
/*<texto>*/ anidarse sin ningn problema. Por ejemplo, el
identificadores, falta todava por dar una: los
siguiente comentario es perfectamente vlido:
Estos comentarios pueden abarcar tantas lneas siguientes nombres no son vlidos como

como sea necesario. Por ejemplo: identificadores ya que tienen un significado


// Comentario contenedor //
Comentario contenido especial en el lenguaje:

/* Esto es un comentario

que ejemplifica cmo se Identificadores abstract, as, base,


escribe comentarios que ocupen varias lneas */
bool, break, byte, case, catch, char, checked,
Al igual que en cualquier lenguaje de class, const, continue, decimal,
Ahora bien, hay que tener cuidado con el hecho de programacin, en C# un identificador no es ms
default, delegate, do, double, else, enum,
que no es posible anidar comentarios de este tipo. que, como su propio nombre indica, un nombre con
event, explicit, extern, false, finally, fixed,
Es decir, no vale escribir comentarios como el el que identificaremos algn elemento de nuestro
float, for, foreach, goto, if, implicit, in, int,
siguiente: cdigo, ya sea una clase, una variable, un mtodo,
interface, internal, lock,
etc.
/* Comentario contenedor is, long, namespace,

/* Comentario contenido */ */ Tpicamente el nombre de un identificador ser una new, null, object, operator, out, override,

secuencia de cualquier nmero de caracteres params, private, protected, public,


Esto se debe a que como el compilador ignora todo alfanumricos incluidas vocales acentuadas y readonly, ref, return, sbyte, sealed, short,
el texto contenido en un comentario y slo busca la ees- tales que el primero de ellos no sea un sizeof, stackalloc, static,
secuencia */ que marca su final, ignorar el nmero. Por ejemplo, identificadores vlidos seran: string, struct, switch,
segundo /* y cuando llegue al primer */ considerar Arriba, caa, C3P0, , etc; pero no lo seran
this, throw, true, try, typeof, uint, ulong,
que ha acabado el comentario abierto con el primer 3com, 127, etc.
unchecked, unsafe, ushort,
/* (no el abierto con el segundo) y pasar a buscar
using, virtual, void,
cdigo. Como el */ slo lo admite si ha detectado Sin embargo, y aunque por motivos de legibilidad
antes algn comentario abierto y an no cerrado while
del cdigo no se recomienda, C# tambin permite
(no mientras busca cdigo), cuando llegue al incluir dentro de un identificador caracteres
segundo */ considerar que ha habido un error ya especiales imprimibles tales como smbolos de
que encontrar el */ donde esperaba encontrar diresis, subrayados, etc. siempre y cuando estos
cdigo. no tengan un significado especial dentro del
Dado que muchas veces los comentarios que se lenguaje.

Вам также может понравиться