Revistas en disco
 Fanzine Nº1 - Julio 1992
Anterior
Menú
Logotipo

Fanzine
Número 1 - JULIO 1992

CURSO DE C
Y MANEJO DEL LATTICE - C COMPILER

(c) Warlord, Abril 1992

En esta sección daré un breve curso de C, para una vez finalizado éste, comentar a fondo el Lattice C compiler. Como digo,no entraré demasiado en profundidades sobre el lenguaje C. No seguiré el guión de ningún libro, pero cualquiera que consultéis vendrá mas o menos como yo lo explico. Os recomiendo el de Anaya de Turbo C.

Tampoco voy a hacer un artículo introductorio diciendo eso de que el C es muy bonito y útil y todo eso que se suele decir. Iré directamente al grano. De todos modos si queréis enteraros un poco de esto, os remito a cualquier buen libro de C, o sin ir más lejos al primer número de la AMIGA ZETA.


LENGUAJE C:

Tipos de caracteres:

Entero decimal.Se representa por %d
Caracter.Representado por %c
Tira de caracteres.Se representa por %s
Numero en punto flotante, con notación exponencial. Se representa por %e
Numero en punto flotante, con notación decimal. Se denota por %f
%g significa que usará cualquiera de los dos anteriores.El que sea más corto.
%u Entero decimal sin signo
%o Entero octal sin signo.
%x entero hexadecimal sin signo.

Códigos de control:

\n   nueva línea
\t tabulado
\b retroceso
\r retorno de carro
\f salto de página
\\ barra atrás (ie,\)
\' apóstrofe (ie,')
\" comillas (ie,")

¡Ostia!, ¡Que rollo!.

Veamos un pequeño ejemplo:

   main ()
   {
   printf("Hola.Me llamo %s tengo %d años y vivo en %s\n",JMC,22,CADIZ);
   printf("Esta es laa\b segunda linea");
   printf("Esta no es la tercera porque no puse \\n \n");   
   printf("Esta si es la tercera, porque puse \\n");
   }

salida:

        Hola. Me llamo JMC tengo 22 años y vivo en Cádiz
	      Esta es la segunda lineaEsta no es la tercera porque no puse \n
	      Esta si es la tercera, porque puse \n

Como veréis,para imprimir los distintos datos hemos utilizado los formatos anteriores: %d para escribir un número entero (22) y %s para pintar dos cadenas de caracteres (JMC y Cádiz).

En este ejemplo, podemos observar:

main() = Significa que es el bloque principal del programa (y en este caso el único)
{,} = Se colocan al empezar un bloque, un bucle,...
; Se coloca al final de cada instrucción.
printf = Esta orden es la utilizada para imprimir un mensaje en panatalla.(más adelante veremos ésta y otra más).
Hemos utilizado \b para borrar un carácter
Hemos utilizado \\n para que escriba "\n" y no lo interprete como el
final de la línea. Desde luego, podíamos también haber escrito:

  printf("primera línea \n segunda línea \n tercera línea\n")

Lo que simplificaría bastante lo anterior


DATOS EN C:

Anteriormente hemos visto algunos tipos de datos:Enteros,decimales, ... y cómo son representados.Vamos a explicar ahora esto con algo más de detalle:

ENTEROS:

Son todos los números sin coma decimal: -1, -23, 4, 0 ....
Las variables que vayan a contener a enteros se definen como INT.
Por ejemplo, INT A; significaría que A sólo va a contener a variables enteras.Sin embargo, es corriente que necesitemos enteros más grandes o más pequeños que el rango que nuestros 16 bits nos permiten:

short a; es un entero de tan sólo 8 bits
long a; entero de 32 bits

es decir:

int a; es un entero de -32768 a +32767
short a; entero de -128 a +127
long a; entero de -2147483648 a +2147483647

Si nos fijamos, todas estas variables enteras admiten recorrido negativo. Si ésto no nos interesara, porque la variable nunca fuera negativa se utiliza lo mismo pero poniendole delante "unsigned", como: unsigned short a.Con esto conseguimos que en vez de -128 a +127,sea de 0 a 255,


CONSTANTES EN PUNTO FLOTANTE:

Se utilizan para números muy grandes o muy pequeños. Su utilidad es manifiesta en el ahorro de memoria. Se precisa de muchos bytes si queremos almacenar una gran cadena de números. Sin embargo, en punto (o coma) flotante, la necesidad de memoria es mínima. Se representan por la mantisa y el exponente.

                                 así: -1.5 x E+6, que significa:
                                              \|/
                               -1.5 x 1000000 (6 ceros)
      Se declaran como float. (p.e., float a;)

Para mayor precisión, se utiliza double (o long float) que reservan el doble de bytes (64!)

CARACTERES:

Cualquier letra o número puede ser un carácter (a,#,3,N,...) se declaran como "char". Ocupan 8 bits.

Todo esto es muy bonito, pero.... dame un ejemplo ....

Pues bien, ahí va:

  main()
  {
     char a;
     short b;
     float c;
    a='H';
    b=1000;
    c=3.2e-4;
   }

¿Creen que está bien?.... ¡No!, se ha asignado b=1000, pero b es del tipo short, por lo tanto sus valores no pueden pasar de 255. Por lo tanto, o se pone b=255, o bien se cambia "short b" por "int b".

Supongamos ahora que queremos representar una cadena de caracteres, como por ejemplo, un nombre. ¿Cómo podemos hacer esto, con lo visto hasta ahora?. Evidentemente, como muchos de ustedes ya han pensado, se vuelve a recurrir a la expresión "char". Si queremos asignar una cadena de caracteres como por ejemplo, "Mi mamá me mima" a una variable, bastará hacer ...

  main()
  {
   char frase[15];porque tiene 15 letras o caracteres
   ....
   frase="mi mamá me mima";/*¡ojo!: '' para caracteres, "" para frases.*/

De ahora en adelante, llamaremos 'string' a una cadena de caracteres.

  /* Programa chorra 1*/
  #define REVISTA "Fanzine"
  main()
   {
   char nombre[10];
   printf("Amigamaniacoadicto, dime tu nombre... ");
   scanf("%s",nombre);
   printf("Hola, %s, ¿Quieres colaborar en $s\n",nombre,REVISTA);
   }

Aquí hay varias cosas nuevas:

* Un comentario . Va entre */ y se cierra con */. ¡Nunca equivocarse de orden, os traería funestas consecuencias. Este comentario puede colocarse en cualquier lugar del programa.

* El comando define. Lo que hace, es que al ponerlo antes del main(), asignamos a la variable REVISTA la cadena "fanzine" (que REVISTA, esté en mayúsculas no es casual. Este tipo de variables se suelen y se deben poner en mayúsculas). Más adelante volveremos sobre este comando.

Todo esto está muy bien... ¿pero cómo puedo hacer un programa?

Explicar el funcionamiento del Lattice C, es harto difícil. Pero ahí va una pequeña muestra para que podáis compilar y ejecutar un programa:

  1. Instalar el Lattice C. Es fácil, basta con que leas el read.me que se encuentra en el primer disquette del Lattice C

  2. Mediante un editor escribe el programa. Se recomienda el Cygnus (CED), Es conveniente instalar el CED en el directorio C del disco 1.

  3. Una vez escrito, grabarlo a RAM: o a otro disco. Llamémosle Estupidez1.c

  4. Vete a la RAM (CD RAM:)

  5. Escribe: lc -L Estupidez1 (si está en RAM, si no, sería df0:Est...)

    Ojo:
    -L (L mayúscula)
    El nombre debe ir seguido de .c

  6. Si lo has hecho bien, el programa será compilado y linkado (su significado para otra lección). Observaréis que en RAM han aparecido nuevos ficheros con distintas extensiones. Para ejecutar nuestro primer programa basta con escribir estupidez1 y ... ¡Ohhhhh!

Si no tenéis editor, podéis hacerlo con el LSE (Lattice Screen Editor). Es un editor que incluye el propio Lattice C, pero que te permite otras muchas opciones (compilar...). Su manejo, debe ser explicado en otra ocasión. Por ahora, basta saber que se carga escribiendo lse. Escribir el programa y salvarlo a Ram, siguiendo los anteriores pasos.


COMANDOS BASICOS DEL C:

PRINTF

Ya hemos visto como va. Su formato es:

  printf(" <frase+códigos>",variables);

ejemplo:

  ....
  ordenata="amiga";
  ....
  printf("¡Hola!, yo tengo un %s \n",ordenata);


SCANF

También hemos visto un ejemplo anteriormente. Se utiliza para leer datos desde un dispositivo (entiéndase teclado, disco...). Su formato es muy similar al de printf. Un ejemplo:

  scanf("%s",nombre);

otro más:

  scanf("Dame tu nombre %s",nombre);

¡Ooops!, ¡Un momento!, esto no es correcto. Esta función no admite esto. Lo correcto sería:

  printf("Dame tu nombre\n");
  scanf("%s",nombre);

Otro ejemplo más:

  printf("Dime tu edad");
  scanf ("%s",&edad);

¡Espera un momento!, ¿qué es el &?
Bueno, este ejemplo nos lleva a un concepto FUNDAMENTAL. El de PUNTEROS.


PUNTEROS "POR UN TUBO":

Entender el concepto de puntero es fundamental en C y en cualquier lenguaje de bajo nivel.

Cuando definimos ... int edad; ,estamos diciendo que la variable "edad" va a ser un entero. Si asignamos edad=23, este número se guarda en una determinada posición de memoria, por ejemplo en la posición 4444. Entonces:

  edad=22
  &edad=4444

¿Está claro?. &variable nos da la dirección real de memoria donde se encuentra la variable. Se dirá que &edad es una CONSTANTE PUNTERO.

¡Ok!, ¡ya me enterado!, pero ... ¿y si tenemos lo contrario?. Veamos:

  memoria =&edad; /*(Ahora memoria=4444)*/

¿Qué sucede si queremos conocer el contenido de memoria?. Esto nos lleva al operador de indirección "*". Un ejemplo:

  edad = 22;
  memoria = &edad; /*ahora memoria=4444*/
  años = *memoria; /*ahora años=23*/

Como podemos observar, el operador " * " hace lo contrario que &. Nos da el valor contenido en la dirección de memoria apuntada por memoria.

¡Cuidado!. El manejo de punteros suele crear verdaderos quebraderos de cabeza. Si por error pusiésemos años = *edad, ¿qué pasaría?. Como edad vale 22, ahora años sería el valor que se encontrara almacenado en la dirección 22 y no en la 4444.

Bueno colegas AmigaCmaniacoadictos, creo que ya he escrito suficiente por esta vez. Pero no lo olvidéis, en el próximo .... MAS.


Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal