Variables:
Todo programador tiene una idea intuitiva de qué es una variable: un trocito de memoria que guarda un valor. Las variables tienen:
- Una dirección de memoria.
- Un nombre.
- Un valor, que puede cambiar, por eso se llama variable.
- Un tipo.
En C, los nombres de las variables tienen que empezar por una letra, y pueden contener letras, algunos símbolos y números. Por supuesto, el nombre no puede ser una palabra reservada del lenguaje. Las mayúsculas y las minúsculas se consideran diferentes. Las variables se suelen nombrar con minúsculas y las constantes simbólicas con mayúsculas.
Tipos de datos:
Las variables tienen un tipo, que define el conjunto de valores que pueden tomar. Los tipos de datos pueden ser básicos o estructurados.
Los tipos básicos son los más sencillos, los que aporta el lenguaje de forma nativa. En el caso de C son:
- char.
- int.
- float (no soportado en cc65).
- double (no soportado en cc65).
Estos tipos básicos se pueden modificar con los calificadores:
- short y long.
- signed y unsigned.
El primero hace referencia al tamaño en bytes, y el segundo al carácter con signo / sin signo.
Una curiosidad de C es que no fija el tamaño en bytes de sus tipos básicos o primitivos. Sólo fija que un short tiene que ser menor que un int, que tiene que ser menor que un long. Esto ha dificultado su portabilidad entre máquinas.
Constantes y constantes simbólicas:
Las constantes –o valores constantes– son valores fijos que se utilizan en inicializaciones, expresiones, llamadas a funciones, etc. Las constantes también tienen un tipo, que puede ser el natural a partir de su sintaxis o se puede forzar mediante sufijos. Lo mejor es ver ejemplos:
- 1234 es una constante de tipo int.
- 123456789L es una constante de tipo long.
- 123.4 es una constante de tipo double.
- ‘A’ es una constante de tipo char.
- “programa” es una constante de tipo array de char (cadena).
- Etc.
Las constantes de tipo int se pueden expresar en decimal, en octal empezando por 0, o en hexadecimal empezando por 0x.
Los caracteres especiales se pueden representar mediante secuencias de escape. Por ejemplo, la nueva línea se puede representar con \n, la barra invertida con \\, etc. También se puede usar \xHH, donde HH es el valor ASCII en hexadecimal.
Con la instrucción del preprocesador #define es posible definir constantes simbólicas, es decir, literales que equivalen a un valor fijo. Por ejemplo, #define SPRITES_NUM 8 hace que el literal SPRITES_NUM equivalga a 8.
También es posible definir enumeraciones, por ejemplo:
enum meses {ENE=1, FEB, MAR, ABR, MAY, JUN, JUL, AGO, SEP, OCT, NOV, DIC}
lo cual equivale a definir ENE = 1, FEB = 2, MAR = 3, etc.
Declaraciones:
Para poder usar una variable, antes hay que declararla. Al declararla se indica:
- Su tipo.
- Su nombre.
- Y una inicialización opcional.
Por ejemplo:
- int contador = 0;
- char car = ‘a’;
En función de donde se declaren, las variables pueden ser locales a una función o globales al programa, que en C se llaman variables “externas”.
Las variables locales, si no se inicializan, contienen basura. Y si están inicializadas, se inicializan en cada ejecución de la función (salvo que se declaren static, como veremos más adelante).
Las variables globales se inicializan sólo una vez antes de iniciarse la ejecución del programa. Se inicializan a 0 salvo que tengan una inicialización explícita.
En una declaración se puede usar el calificador const para indicar que una variable no cambia su valor. Sería una variable constante, si vale la paradoja. También se puede usar const en los parámetros de las funciones.
Código de ejemplo: variables