Está en la página 1de 8

Definicion de C (lenguaje de programacin) C es un lenguaje de programacin creado en 1972 por Dennis M.

Ritchie en los Laboratorios Bell como evolucin del anterior lenguaje B, a su vez basado en BCPL. Al igual que B, es un lenguaje orientado a la implementacin de Sistemas Operativos, concretamente Unix. C es apreciado por la eficiencia del cdigo que produce y es el lenguaje de programacin ms popular para crear software de sistemas, aunque tambin se utiliza para crear aplicaciones. Se trata de un lenguaje fuertemente tipificado de medio nivel pero con muchas caractersticas de bajo nivel. Dispone de las estructuras tpicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Los compiladores suelen ofrecer extensiones al lenguaje que posibilitan mezclar cdigo en ensamblador con cdigo C o acceder directamente a memoria o dispositivos perifricos. La primera estandarizacin del lenguaje C fue en ANSI, con el estndar X3.159-1989. El lenguaje que define este estndar fue conocido vulgarmente como ANSI C. Posteriormente, en 1990, fue ratificado como estndar ISO (ISO/IEC 9899:1990). La adopcin de este estndar es muy amplia por lo que, si los programas creados lo siguen, el cdigo es porttil entre plataformas y/o arquitecturas. Caractersticas Propiedades Un ncleo del lenguaje simple, con funcionalidades aadidas importantes, como funciones matemticas y de manejo de archivos, proporcionadas por bibliotecas. Es un lenguaje muy flexible que permite programar con mltiples estilos. Uno de los ms empleados es el estructurado "no llevado al extremo" (permitiendo ciertas licencias de ruptura). Un sistema de tipos que impide operaciones sin sentido. Usa un lenguaje de preprocesado, el preprocesador de C, para tareas como definir macros e incluir mltiples archivos de cdigo fuente. Acceso a memoria de bajo nivel mediante el uso de punteros. Interrupciones al procesador con uniones. Un conjunto reducido de palabras clave. Por defecto, el paso de parmetros a una funcin se realiza por valor. El paso por referencia se consigue pasando explcitamente a las funciones las direcciones de memoria de dichos parmetros. Punteros a funciones y variables estticas, que permiten una forma rudimentaria de encapsulado y polimorfismo. Tipos de datos agregados (struct) que permiten que datos relacionados (como un empleado, que tiene un id, un nombre y un salario) se combinen y se manipulen como un todo (en una nica variable "empleado"). Carencias Recoleccin de basura nativa, sin embargo se encuentran a tal efecto bibliotecas como la "libgc" desarrollada por Sun Microsystems, o el Recolector de basura de Boehm. Soporte para programacin orientada a objetos, aunque la implementacin original de C++ fue un preprocesador que traduca cdigo fuente de C++ a C.

Funciones anidadas, aunque GCC tiene esta caracterstica como extensin. Soporte nativo para programacin multihilo. Ventajas Lenguaje muy eficiente puesto que es posible utilizar sus caractersticas de bajo nivel para realizar implementaciones ptimas. A pesar de su bajo nivel es el lenguaje ms portado en existencia, habiendo compiladores para casi todos los sistemas conocidos. Proporciona facilidades para realizar programas modulares y/o utilizar cdigo o bibliotecas existentes. Bibliotecas C Una biblioteca de C es una coleccin de funciones utilizadas en el lenguaje de programacin C. Las bibliotecas ms comunes son la biblioteca estndar de C y la biblioteca del estndar ANSI C, la cual provee las especificaciones de los estndares que son ampliamente compartidas entre bibliotecas. La biblioteca ANSI C estndar, incluye funciones para la entrada y salida de archivos, alojamiento de memoria y operaciones con datos comunes: funciones matemticas, funciones de manejo de cadenas de texto y funciones de hora y fecha. Otras bibliotecas C son aquellas utilizadas para desarrollar sistemas Unix, las cuales proveen interfaces hacia el ncleo. Estas funciones son detalladas en varios estndares tales como POSIX y el Single UNIX Specification. Ya que muchos programas han sido escritos en el lenguaje C existe una gran variedad de bibliotecas disponibles. Muchas bibliotecas son escritas en C debido a que C genera cdigo objeto rpido; los programadores luego generan interfaces a la biblioteca para que las rutinas puedan ser utilizadas desde lenguajes de mayor nivel, tales como Java, Perl y Python. Tipos y variables La notacin hngara no es bienvenida en cdigo nuevo. Contribuye a malas prcticas de programador, y no participa en la idea de que el programador debe manipular abstracciones para poder dedicarse mejor al problema que realmente le atae. Cada conjunto de valores que merezca un tipo, deber ser manejado con un tipo aparte, de esta manera se abstrae al programador del detalle de qu debe ser ese tipo. Tambien se reserva uno la posibilidad de alterar el tipo que se usa para esos valores. Se deben, en lo posible, usar los tipos nativos del lenguaje. Es decir que en C++ se usar bool y no alguna extraa macro BOOL o BOOLEAN. Las variables de tipo lgico o booleano debern en lo posible tener nombres que se vean como predicados. Ejemplo: Si hay una variable estamos_fritos, podremos escribir: if(estamos_fritos) abort();. Anti-ejemplo: En cambio, si la variable se llama estado_fritura, el cdigo escrito no queda igual de evidente: if(estado_fritura) .... Las funciones y variables globales deben tener nombres descriptivos, sin importar que sean largos. Ejemplo: cerrar_conexion(). Las variables de corto alcance, por ejemplo un contador, deberan tener nombres cortos y simples. Las variables y funciones globales que pertenezcan a un mdulo o biblioteca reusable debern estar demarcadas, cuidando as el espacio de nombres. En C esto quiere decir que se usar un

prefijo delante de los nombres. En C++ se debern usar los namespaces del lenguaje. En Java esto es ms natural por las clases y paquetes. Se deben preferir los enums por sobre las macros del preprocesador. Proveen mayor chequeo de tipos y son vistas por los debuggers. En Java vale lo mismo: nunca usar constantes numricas, siempre enums. ESTRUCTURAS EN LENGUAJE C Las estructuras ya estaban presentes en C. Hay quien las ve como una clase, pero sin mtodos (solo almacena datos). Supongamos que queremos hacer una agenda con los nmeros de telfono de nuestros amigos. Necesitaramos un array de Cadenas para almacenar sus nombres, otro para sus apellidos y otro para sus nmeros de telfono. Esto puede hacer que el programa quede desordenado y difcil de seguir. Y aqu es donde vienen en nuestro auxilio las estructuras. Para definir una estructura usamos el siguiente formato: struct nombre_de_la_estructura { campos de estructura; }; NOTA: Es importante no olvidar el ';' del final. Vamos a crear una declaracion de estructura llamada amigo: struct estructura_amigo { char nombre[30]; char apellido[40]; char telefono[10]; char edad; }; A cada elemento de esta estructura (nombre, apellido, telfono) se le llama campo o miembro. Una vez definida la estructura, podemos usarla declarando una variable con esa estructura: struct estructura_amigo amigo; Ahora la variable amigo es de tipo estructura_amigo. Para acceder al nombre de amigo usamos: amigo.nombre. Arrays de estructuras Supongamos ahora que queremos guardar la informacion de varios amigos. Con una variable de estructura solo podemos guardar los datos de uno. Necesitamos declarar arrays de estructuras: struct estructura_amigo amigo[10]; Ahora necesitamos saber como acceder a cada elemento del array. La variable definida es amigo, por lo tanto para acceder al primer elemento usaremos amigo[0] y a su miembro nombre: amigo[0].nombre. Inicializar una estructura Primero se define la estructura y luego al declarar una variable como estructura le damos el valor inicial que queramos. Ejemplo: struct estructura_amigo amigo = { "Juanjo",

"Lopez", "592-0483", 30 }; Por supuesto hemos de meter en cada campo el tipo de datos correcto. Punteros a estructuras Primero hay que definir la estructura igual que antes, pero al declarar la variable de tipo estructura debemos ponerle el operador '*' para indicarle que es un puntero. Es importante recordar que un puntero no debe apuntar a un lugar cualquiera, debemos darle una direccion valida donde apuntar. No podemos por ejemplo crear un puntero a estructura y meter los datos directamente mediante ese puntero, no sabemos donde apunta el puntero y los datos se almacenaran en un lugar cualquiera. Y para comprender como funcionan nada mejor que un ejemplo. Este programa utiliza un puntero para acceder a la informacion de la estructura: #include <stdio.h> struct estructura_amigo { char nombre[30]; char apellido[40]; char telefono[10]; int edad; }; struct estructura_amigo amigo = { "Juanjo", "Lopez", "592-0483", 30 }; struct estructura_amigo *p_amigo; int main() { p_amigo = &amigo; printf( "%s tiene ", p_amigo->apellido ); printf( "%i aos ", p_amigo->edad ); printf( "y su telfono es el %s.\n" , p_amigo->telefono ); } p_amigo es un puntero a la estructura estructura_amigo. Dado que es un puntero tenemos que indicarle donde debe apuntar, en este caso vamos a hacer que apunte a la variable amigo: p_amigo = &amigo; El operador & que significa 'dame la direccion donde esta almacenado...'. Para acceder a cada campo de la estructura antes lo hacamos usando el operador '.', pero, como muestra el ejemplo, si se trabaja con punteros se debe usar el operador '->'.

Punteros a arrays de estructuras Por supuesto tambin podemos usar punteros con arrays de estructuras. Paso de estructuras a funciones Las estructuras se pueden pasar directamente a una funcion igual que hacamos con las variables. Ejemplo: int suma( struct estructura_amigo arg_amigo ) { return arg_amigo.edad+20; } Tipos de datos en C SOFTWARE - Programacin El primer objetivo de un programa informtico es el manejo de datos. Un dato es toda aquella informacin que se puede tratar en un programa informtico. En este artculo vamos a conocer los tipos de datos que podemos manejar programando en C. Existen unos datos de entrada y unos datos de salida. Los datos de entrada se manipulan en el programa produciendo unos datos de salida.

Un dato dentro de un programa se caracteriza por llevar asociado un identificador, un tipo y un valor. Identificador: Nombre para referenciar al dato dentro del programa Tipo: el tipo de un dato determina el rango de valores que puede tomar el dato y su ocupacin en memoria durante la ejecucin del programa Valor: Sera un elemento determinado dentro del rango de valores permitidos por el tipo de dato definido. Algunos ejemplos de datos son: la edad, el saldo de una cuenta bancaria, el nombre de una persona, la letra del piso de una direccin, etc. A continuacin vamos a describir los distintos tipos de datos que existen. TIPOS DE DATOS Hay dos clases de tipos de datos: tipos fundamentales y tipos derivados. nicamente vamos a ver los tipos de datos fundamentales. Tipo entero: representa nmeros enteros con o sin signo, que estarn compuestos por los dgitos del 0 al 9, pudiendo ser precedidos por los signos + o -. Algunos ejemplo de datos enteros son: 0, 23, -176, -1, etc. Para definir variables en C se antepone la palabra reservada del tipo al identificador de la variable. El tipo de datos entero se define en el lenguaje de programacin C por la palabra reservada int. Para definir un tipo de dato en C se escribe lo siguiente: int nombre_variable = valor; No es necesario que la variable tenga un valor predeterminado. Se puede definir sin asignarle ningn valor.

Si tenemos varios datos que son del mismo tipo, se pueden definir todas en la misma lnea de cdigo escribiendo un nico int, separando el nombre de las variables por ,. Una vez que se haya acabado de definir variables, se cierra la lnea de cdigo con ;, Por ejemplo: int edad = 24; int edad; int edad, num, contador; Tipo real: Se emplean para representar nmeros reales (con decimales). Para definir datos reales se antepone la palabra reservada float al identificador de la variable. float identificador = valor; Por ejemplo: float numero1, numero2; float numero3 = 123.43; float numero3; Tipo carcter: Este tipo de datos se emplea para representar un carcter perteneciente a un determinado cdigo utilizado por el ordenador (normalmente el cdigo ASCII). Para representar este tipo de dato se antepone la palabra reservada char al identificador de la variable. Char identificador = valor; Una constante tipo char se representa como un solo carcter encerrado entre comillas simples. Por ejemplo: char letra, letra2; char letra=a; Tipo cadena de caracteres: una cadena de caracteres es un nmero de caracteres consecutivos (incluso ninguno) encerrado entre unos delimitadores determinados, que en el lenguaje C son las comillas dobles. Para definir variables de tipo cadena, estas se definen como vectores de caracteres, esto es, anteponiendo la palabra reservada char al identificador de la variable, y despus entre corchetes la longitud mxima de cadena. Char identificador[cantidad] = mensaje ; Por ejemplo: char cadena[20]; char cadena[20] = Hola mundo; char cadena[] = HOLA; En la siguiente tabla se hace un resumen de los distintos tipos de datos: Tipo de dato Palabra reservada Ejemplo Entero Int Int numero=0; Real Float Float numero=12.2; Carcter Char

Char letra = a; Cadena de carcter Char Char palabra[10] = HOLA; Directiva #include 1 Sinopsis La directiva #include carga determinados ficheros denominados, ficheros de inclusin (include files), ficheros de cabecera (header files) o simplemente cabeceras, y los inserta en el cdigo fuente (en el punto de la directiva) que desde ese momento queda sustituida por el texto contenido en el fichero. 2 Sintaxis Tiene tres versiones: #include <nombre_de_cabecera> #include "nombre_de_cabecera" #include macro_identificador Ejemplos #include <stdio.h> #include "D:\Cabeceras\Cpp\versiones.h" #include VERSIONUS ..... #define VESIONUS "D:\Cabeceras\Cpp\VersionUs." 3 Descripcin En la primera y la segunda versin de la sintaxis no se intenta ninguna macro-sustitucin. En otras palabras: nombre_de_cabecera debe ser un nombre vlido de fichero con una extensin. Tradicionalmente esta extensin es .h (por "header"). La diferencia entre ambas se limita al mecanismo empleado para localizar el fichero a incluir: La primera forma supone que el fichero, generalmente con la extensin .h, ser buscado en el directorio de cabeceras estndar (generalmente /usr/include/CC). La segunda forma se utiliza para cualquier fichero situado en directorio distinto al de cabeceras estndar. Debe incluir de forma explcita su "paht" para que pueda ser cargado por el preprocesador. La ausencia de "path" supone el directorio actual (donde est el fuente que se compila). En estos casos solo se busca en el directorio indicado. La tercera versin supone que el primer carcter no blanco despus de #include no es < (60) ni " (34) y que hay definida una macro que puede transformar macro_identificador en un nombre de cabecera vlido en el formato <nombre_de_cabecera> o "nombre_de_cabecera". En cualquiera de los tres casos el resultado es el mismo. El preprocesador elimina la lnea #include y la reemplaza con el texto completo del fichero de cabecera en dicho punto [1]. Por tradicin los #include se colocan siempre al comienzo del fichero fuente, pero desde luego su situacin tiene influencia en el mbito y duracin de los identificadores que haya en el fichero a incluir.

que son librerias de lenguaje c? Son todo el conjunto de funciones, macros y constantes que el lenguaje tiene para que puedas escribir programas. Se llaman por medio de las cabeceras (headers) y por eso terminan con .h El encabezado ms comn es stdio.h y para llamarlo en un cdigo en C usas la instruccin de preprocesador #include #include <stdio.h> stdio viene de "standard in/out", que son las funciones ms simples para alimentar de datos al programa o arrojar datos de respuesta al usuario, ya sea por la consola o por ficheros.