Si necesitamos almacenar un valor en una variable que nunca será cambiado el lenguaje C nos permite definir una constante.
const int impuesto=21;
La definición como constante del identificador impuesto asegura que cualquier intento de asignarle otro valor generará un error cuando compilemos el programa:
impuesto=25;
Se pueden definir constantes de cualquier tipo de dato que nos provee el lenguaje C
Una constante a diferencia de una macro ocupa un espacio durante la ejecución del programa:
#define PI 3.1416 const float pi=3.1416
Es importante notar que pi reserva espacio para un valor float durante la ejecución del programa, en cambio la macro PI cuando compilamos se sustituye todas las partes que aparece PI por el valor 3.1416
Definir constantes de distinto tipo e imprimir sus valores.
#include<stdio.h> #include<conio.h> struct persona { char nombre[50]; int edad; }; int main() { const short int v1=30000; const int v2=200000000; const long int v3=2000000000; const long long int v4=20000000000; const float r1=10.55; const double r2=100.99; const char l1='A'; const char titulo[7]="Inicio"; const struct persona per1={"juan",18}; printf("Una constante short int :%i\n",v1); printf("Una constante int :%i\n",v2); printf("Una constante long int :%li\n",v3); printf("Una constante long long int :%lli\n",v4); printf("Una constante float :%0.2f\n",r1); printf("Una constante double :%0.2f\n",r2); printf("Una constante cadena de caracteres :%s\n",titulo); printf("Una constante de tipo registro con dos campos :%s %i\n",per1.nombre,per1.edad); getch(); return 0; }
Hemos definido 9 constantes de distinto tipo.
En el momento que se define la constante debemos iniciar su valor por asignación:
const short int v1=30000;
Inclusive si definimos una constante de tipo registro también debemos inicializarla inmediatamente:
const struct persona per1={"juan",18};
Si intentamos luego de inicializar una constante cambiar su valor se produce un error cuando queremos compilar el programa:
per1.edad=15;
Cuando un parámetro no debe ser modificado es conveniente agregarle el modificador const para evitar que por descuido le asignemos un valor.
Cargar un vector de 5 enteros y luego imprimirlo.
#include<stdio.h> #include<conio.h> #define CANTIDAD 5 void cargar(int vec[CANTIDAD]) { int f; for(f=0;f<CANTIDAD;f++) { printf("Ingrese componente:"); scanf("%i",&vec[f]); } } void imprimir(const int vec[CANTIDAD]) { int f; for(f=0;f<CANTIDAD;f++) { printf("%i ",vec[f]); } } int main() { int vec[CANTIDAD]; cargar(vec); imprimir(vec); getch(); return 0; }
La función de imprimir tiene el objetivo de mostrar el contenido del vector y no modificarlo, es conveniente agregarle el modificador const al parámetro vec:
void imprimir(const int vec[CANTIDAD]) { int f; for(f=0;f<CANTIDAD;f++) { printf("%i ",vec[f]); } }
Si por error queremos asignarle valores a las componentes del vector luego cuando lo compilemos al programa se generará un error sintáctico:
Si consultamos el código fuente del sistema operativo Linux veremos que utiliza el modificador const en numerosas funciones: