Programación en C, C++, C#

Por Nacho Cabanes Ultima modificación: 15-Mar-2008  /   English Version 
Últimas novedades...


Qué son C, C++, C#

C es un lenguaje de programación de ordenadores, de propósito general. Su uso está muy extendido, y existen compiladores para muchos sistemas operativos.

C++ (C plus plus o C más más) es una evolución del lenguaje C, que soporta la Programación Orientada a Objetos.

A su vez, C# (se debe leer "C sharp" -sostenido-, es una alusión musical) es una evolución de C++, surgida hace poco tiempo, propuesta por Microsoft como alternativa a Java.

(Volver arriba)

Cursos de C, C++, C#

Cursos de C:
Cursos de C++:
Cursos de C#:
Otros cursos relacionados con C

(Volver arriba)

Compiladores de C, C++ y C#

Para Windows, C y C++:
  • MinGW es un compilador de C y C++ basado en el de GNU (GCC), adaptado para Windows. Se puede descargar de www.mingw.org. En esta página puede llegar a ser complicado encontrar lo que se debe descargar, pero una alternativa es descargar un entorno que lo incorpore listo para usar, como estos tres:
    • CodeBlocks es otro entorno de desarrollo para Windows, que también se puede descargar por sí sólo (un fichero de unos 10 Mb) o con el compilador MinGW en un paquete listo para empezar a trabajar (un fichero de unos 20 Mb). La última versión estable es la 8.02, del 28 de febrero de 2008. Se sigue mejorando y se lanzan con frecuencia nuevas versiones con ligeras correcciones ("nightly builds"). Tiene más detalles (en inglés) en su foro.
    • Dev-C++ es un entorno de desarrollo para Windows, creado por  Bloodshed, que se puede descargar solo o con el compilador MinGW (GCC 3.4.2), en un paquete listo para empezar a trabajar. La última versión es la 4.9.9.2, de febrero de 2005.
    • Otro entorno es MinGW Developer Studio. Su última versión es la 2.05, de abril de 2005 (con GCC 3.4.2).
  • Watcom C++ ha sido mucho tiempo uno de los compiladores comerciales más extendido. La mayoría de los juegos comerciales desarrollados entre 1993 y 1995 se crearon con él. La lista incluye joyas como Doom y Duke Nukem 3D. Ahora se ha convertido en "Open Source". Se puede descargar la documentación y el compilador (versión 1.7a disponible desde octubre de 2007), en www.openwatcom.com
  • Borland C++ 5.5 también tiene una versión de libre distribución (que no incluye entorno de desarrollo, sólo las utilidades de línea de comandos) y se puede descargar desde la página Web de Borland. Se trata de una herramienta de agosto de 2000. También se pueden consultar unas instrucciones básicas de uso (en inglés) en community.borland.com/article/0,1410,20997,00.html
  • Digital Mars es un compilador de C y C++ para Dos y Windows, de libre distribución, todavía en fase beta, creado por Walter Bright (autor de Symantec C++), que no incluye entorno de desarrollo. Versión 8.50 disponible en septiembre de 2007.
  • LCC-Win32. Un compilador de C de libre distribución (gratis) para Windows, de 3.2 Mb de tamaño.
  • Informacion sobre Visual C++, la herramienta visual para Windows creada por Microsoft, basada en el lenguaje C++.
  • La versión "Express" de Visual C++ 2005 parece poder descargarse libremente desde la página Web de Microsoft, en msdn.microsoft.com/vstudio/express/visualc/download/. Si la prefieres en español, debería estar disponible en www.microsoft.com/spanish/msdn/vstudio/express/VC/default.mspx.
  • Cygwin no es sólo un compilador, sino la adaptación a Windows de toda una serie de herramientas Unix.
Para Windows, C# Para Dos
  • Turbo C++ y Borland C++ son productos de Borland, hoy descatalogados, de modo que sera dificil adquirirlos en tiendas. La versión actual recibe el nombre de "C++ Builder", y es un compilador visual para Windows. La informacion sobre los productos de desarrollo creados por Borland está en la direccion www.borland.es/products.
  • Turbo C 2.01 ahora es de libre distribución y se puede descargar desde la página Web de Borland,
  • Turbo C++ 1.01 ahora es de libre distribución y se puede descargar desde la página Web de Borland.
  • DJGPP. Un buen compilador de C/C++ gratis de 32 bits para MsDos (y Windows modo texto), basado en el compilador de GNU, y adaptado por DJ Delorie. Puedes leer algo más sobre él en mi Blog. Desde allí también podrás descargar una versión preinstalada, lista para usar.
  • PCC 2.1. Un compilador de C de libre distribución (shareware) y de pequeño tamaño (unos 175 K, descarga local).

Para Linux:
  • El compilador GCC debería estar disponible en casi cualquier distribución de Linux.
  • Si quieres un entorno de desarrollo, KDevelop es parte del escritorio KDE, y Anjuta es un entorno para Gnome, que tiene su página oficial en anjuta.sourceforge.net. Un entorno alternativo, más sencillo y adecuado para programas de pequeño tamaño es Geany. Puedes leer algún comentario sobre las diferencias de las versiones actuales de Anjuta y Geany en mi Blog.

(Volver arriba)

Librerías para programación visual


Se tiende cada vez más a que los programas que se realizan para otros usuarios tengan interfaces gráficas (típicamente basadas en ventanas), no en modo texto. Por eso, existen muchas librerías de funciones que permiten crear aplicaciones de este tipo. Algunas de ellas permiten existen incluso en versiones para diversos sistemas operativos, como Windows, Linux y MacOs X, lo que permite crear con facilidad programas portables. También es frecuente actualmente que incluyan un editor visual que nos ayude a crear la parte visible de la aplicación sin necesidad de teclear nada.

Algunas de las librerías más reconocidas de este tipo son:
  • QT, de Trolltech, que tiene versiones comerciales pero también una versión Open Source. Incluye un editor visual, QT Designer.
  • Gtkmm (basada en C++) y Gtk+ (para lenguaje C), una libreria desarrollada inicialmente para ser utilizada en el programa de manipulación de imágenes "The Gimp". Su editor visual es Glade.
  • Una tercera alternativa interesante es WxWidgets, usada en aplicaciones como el editor de sonido Audacity o como SciTech Display Doctor.  WxDev es una ampliación del entorno Dev-C++ pensada para desarrollar aplicaciones con WxWidgets, que incluye la librería, el compilador, el editor y un diseñador de formularios.

(Volver arriba)

Fuentes en C, C++, C#

(Volver arriba)

Otros enlaces sobre C, C++, C#

  • Página de Bruce Eckel, creador de libros como "Thinking in C++" y "Thinking in Java", cuyas versiones electrónicas están disponibles, así como los ejemplos incluidos en los libros. También existe un "Thinking in C", en formato de de animación flash. Puedes encontrar todo ello en: http://www.bruceeckel.com
  • HelpPC es una referencia muy completa que incluye ayuda sobre hardware del Pc, las principales funciones del lenguaje C, ensamblador, interrupciones y órdenes de MsDos. Está comprimido en un fichero de 275 K de tamaño.
  • En la página de José Antonio González Seco tienes un curso y otros enlaces relacionados con C#.
  • XNA es una serie de herramientas gratuitas de Microsoft, diseñadas para permitir crear juegos para Pc y Xbox con una cierta facilidad. A mí no me gustó tanto como esperaba (puedes leer los motivos en mi blog), pero para quien tenga equipos potentes, puede ser interesante echarle un vistazo. Puedes ver más detalles en su página oficial, es msdn2.microsoft.com/es-es/xna (a fecha de escribir esta cita, todavía está sólo en inglés).

(Volver arriba)

Contenido de mi curso de C

Mi curso de C acaba de sufrir una remodelación completa. Los contenidos de la versión actual (0.21) son:

0.  Conceptos básicos sobre programación
  0.1 Lenguajes de alto nivel y de bajo nivel.
  0.2 Ensambladores, compiladores e intérpretes
  0.3 Pseudocódigo

1. Toma de contacto con C
  1.1 Escribir un texto en C
    1.1.1 Cómo probar este programa en Linux
    1.1.2 Cómo probar este programa en Windows
  1.2 Mostrar números enteros en pantalla
  1.3 Operaciones aritméticas básicas
    1.3.1. Orden de prioridad de los operadores
    1.3.2. Introducción a los problemas de desbordamiento
  1.4 Introducción a las variables: int
    1.4.1 Definición de variables: números enteros
    1.4.2 Asignación de valores
    1.4.3 Mostrar el valor de una variable en pantalla
  1.5 Identificadores
  1.6 Comentarios
  1.7 Datos por el usuario: scanf

2. Tipos de datos básicos
  2.1. Tipo de datos entero
    2.1.1. Tipos de enteros: signed/unsigned, short/long
    2.1.2. Problemática: asignaciones y tamaño de los números; distintos espacios ocupados según el sistema
    2.1.3. Unidades de medida empleadas en informática (1): bytes, kilobytes, megabytes...
    2.1.4. Unidades de medida empleadas en informática (2): los bits
    2.1.5. Sistemas de numeración: 1- Sistema binario
    2.1.6. Sistemas de numeración: 2- Sistema octal
    2.1.7. Sistemas de numeración: 3- Sistema hexadecimal
    2.1.8. Formato de constantes enteras: oct, hex
    2.1.9. Representación interna de los enteros
    2.1.10. Incremento y decremento
    2.1.11. Operaciones abreviadas: +=
    2.1.12. Modificadores de acceso: const, volatile
  2.2. Tipo de datos real
    2.2.1. Simple y doble precisión
    2.2.2. Mostrar en pantalla números reales
  2.3. Operador de tamaño: sizeof
  2.4. Operador de molde: (tipo) operando
  2.5. Tipo de datos carácter
    2.5.1. Secuencias de escape: \n y otras.
    2.5.2. Introducción a las dificultades de las cadenas de texto

3. Estructuras de control
  3.1. Estructuras alternativas
    3.1.1. If
    3.1.2. If y sentencias compuestas
    3.1.3. Operadores relacionales: <, <=, >, >=, ==,  !=
    3.1.4. If-else
    3.1.5. Operadores lógicos: &&, ||, !
    3.1.6. Cómo funciona realmente la condición en un “if”
    3.1.7. El peligro de la asignación en un “if”
    3.1.8. Introducción a los diagramas de flujo
    3.1.9. Operador condicional: ?
    3.1.10. Switch
  3.2. Estructuras repetitivas
     3.2.1. While
     3.2.2. Do ... While
    3.2.3. For
  3.3. Sentencia break: termina el bucle
  3.4. Sentencia continue: fuerza la siguiente iteración
  3.5. Sentencia goto
  3.6. Más sobre diagramas de flujo. Diagramas de Chapin.

4. Entrada/salida básica
  4.1. printf
  4.2. scanf
  4.3. putchar
  4.4. getchar

5. Arrays y estructuras
  5.1. Conceptos básicos sobre tablas
    5.1.1 Definición de una tabla y acceso a los datos
    5.1.2. Valor inicial de una tabla
    5.1.3. Recorriendo los elementos de una tabla
  5.2. Cadenas de caracteres
    5.2.1. Definición. Lectura desde teclado
    5.2.2. Cómo acceder a las letras que forman una cadena
    5.2.3. Longitud de la cadena
    5.2.4. Entrada/salida para cadenas: gets, puts
    5.2.5. Asignando a una cadena el valor de otra: strcpy, strncpy
    5.2.6. Comparando cadenas: strcmp
    5.2.7. Otras funciones de cadenas. sprintf
    5.2.8. Valor inicial de una cadena de texto
  5.3. Tablas bidimensionales
  5.4. Arrays indeterminados
  5.5. Estructuras
    5.5.1 Definición y acceso a los datos
    5.5.2 Arrays de estructuras
    5.5.3 Estructuras anidadas

6. Manejo de ficheros
  6.1. Escritura en un ficheros de texto
  6.2. Lectura de un fichero de texto
  6.3. Lectura hasta el final del fichero
  6.4. Ficheros con tipo
  6.5 Leer y escribir letra a letra
  6.6 Modos de apertura
  6.7 Ficheros binarios
  6.8 Ejemplo: copiador de ficheros
  6.9 Acceder a cualquier posición de un fichero
  6.10 Ejemplo: leer información de un fichero BMP
  6.11. Ficheros especiales 1: la impresora
  6.12. Ficheros especiales 2: salida de errores

7. Introducción a las funciones
  7.1. Diseño modular de programas: Descomposición modular
  7.2. Conceptos básicos sobre funciones
  7.3. Parámetros de una función
  7.4. Valor devuelto por una función
  7.5. El valor de retorno “void”. El valor de retorno de “main”
  7.6. Variables locales y variables globales
  7.7. Los conflictos de nombres en las variables
  7.8. El orden importa
  7.9. Algunas funciones útiles
    7.9.1. Números aleatorios
    7.9.2. Funciones matemáticas
    7.9.3. Pero casi todo son funciones…
  7.10. Recursividad
  7.11. Cómo interrumpir el programa

8. Cómo depurar los programas
  8.1. Conceptos básicos sobre depuración
  8.2. Ejemplos de algunos entornos

9. Punteros y gestión dinámica de memoria
  9.1. ¿Por qué usar estructuras dinámicas?
  9.2. ¿Qué son los punteros?
  9.3. Repasemos con un ejemplo sencillo
  9.4. Aritmética de punteros
  9.5. Punteros y funciones: parámetros por referencia
  9.6. Punteros y arrays
  9.7. Arrays de punteros
  9.8. Punteros y estructuras
  9.9. Parámetros de “main”
  9.10. Estructuras dinámicas habituales 1: las listas enlazadas
  9.11. Estructuras dinámicas habituales 2: los árboles binarios
  9.12. Indirección múltiple
  9.13. Un ejemplo: copiador de ficheros en una pasada

10. Bibliotecas de uso frecuente
  10.1. Llamadas al sistema: system
  10.2. Temporización
  10.3. Pantalla y teclado con Turbo C
  10.4. Acceso a pantalla en Linux: ncurses.h

11. Otras características avanzadas de C
  11.1 Operaciones con bits
  11.2 Directivas del preprocesador
    11.2.1. Constantes simbólicas: #define
    11.2.2 Inclusión de ficheros:
    11.2.3. Compilación condicional: #ifdef, #endif
    11.2.4. Otras directivas 
  11.3. Programas a partir de varios fuentes 
    11.3.1. Creación desde la línea de comandos 
    11.3.2. Introducción al uso de la herramienta Make 
    11.3.3. Introducción a los “proyectos” 
  11.4 Uniones y campos de bits 
  11.5. El operador coma 
  11.6. Enumeraciones 
  11.7. Definición de tipos 


(Volver arriba)

Novedades y cambios en esta página

15/Mar/2008 Nueva versión de CodeBlocks: 8.02.
12/Nov/2007 Añadidos un curso de C y otro de C++ en español. Referencia a la versión 1.7a de OpenWatcom C++ y a las "nightly builds" de CodeBlocks.
27/Sep/2007 Añadidos 4 cursos de C++ en español, un enlace a las FAQ lite y a las de Stroustrup.
11/Sep/2007 Nueva versión de Digital Mars, la 8.50
21/Ago/2007 Nueva versión de OpenWatcom C++, la 1.7
24/Jul/2007 Nueva versión de OpenWatcom C++, la 1.7 RC1 (Release Candidate 1)
27/Febrero/2007 Incluido un enlace a la página oficial de XNA
04/Febrero/2007 Incluida una referencia (todavía incompleta) con las funciones más habituales de C.
13/Enero/2007 Nueva actualización del curso de C (0.23). Añadidos enlaces a CodeBlocks, Cygwin, Qt, Gtkmm, WxWidgets, WxDev, Geany.
24/Diciembre/2006 Aplicado a esta página el nuevo cambio de imagen de la Web. Está disponible una nueva versión de Open Watcom C++, la 1.6.
31/Octubre/2006 Nueva actualización del curso de C (0.22). Disponible nueva versión de Digital Mars (8.49).
11/Agosto/2006 Añadido un enlace a una serie de ejercicios de C en Linux, creados por Chuidiang.
07/Julio/2006 Nueva actualización del curso de C (0.21), pre-definitiva.
09/Junio/2006 Nueva actualización del curso de C (0.20). Disponible un curso de gráficos en C usando SDL.
08/Mayo/2006 Nueva actualización del curso de C (0.19). Disponible una nueva versión del compilador Open Watcom C++, la 1.5.
29/Abril/2006 Comienza una revisión de mi introducción a C++. Reorganizada la lista de cursos,para que sean más fáciles de encontrar según el lenguaje.
27/Abril/2006 Nueva actualización del curso de C (0.18). Reorganizada la lista de compiladores,para que sean más fáciles de encontrar según el sistema operativo. Añadido un enlace a la versión "Express" de Visual C# 2005 parece poder descargarse libremente desde la página Web de Microsoft.
13/Abril/2006 Disponibles 9 fuentes de ejemplo para descargar (que poco a poco irán siendo muuuchos más).
05/Abril/2006 Nueva actualización del curso de C (0.17). La versión "Express" de Visual C++ 2005 parece poder descargarse libremente desde la página Web de Microsoft -> añadido un enlace.
22/Marzo/2006 Nueva actualización del curso de C (0.16).
19/Marzo/2006 Nueva actualización del curso de C (0.15). Añadidos enlaces a otros dos cursos de C#.
27/Febrero/2006 Una versión en formato HTML de mi curso de C se podrá consultar en línea en AprendeAProgramar.com. Incluido en enlace correspondiente.
17/Febrero/2006 Nueva actualización del curso de C (0.14). Añadido otro curso de C en español, un seminario de C y otro de C++, y una referencia breve de C.
11/Febrero/2006 Nueva actualización del curso de C (0.13).
25/Enero/2006 Nueva actualización del curso de C (0.12). Está disponible para descarga la versión 1.4 de OpenWatcom y la 8.47 de Digital Mars.
15/Enero/2006 Nueva actualización del curso de C (0.11)
01/Diciembre/2005 Nueva actualización del curso de C (0.09)
15/Noviembre/2005 Nueva actualización del curso de C (0.08)
08/Noviembre/2005 Nueva actualización del curso de C (0.07)
24/Octubre/2005 Nueva actualización del curso de C (0.05)
02/Octubre/2005 Incluida la nueva versión de mi curso de C, más progresiva, en formato PDF.
07/Agosto/2005 Revisados muchos de los enlaces. Corregido el de C++ Builder y algún otro. Añadido un enlace a MinGW Developer Studio y otro a Sharp Develop. Aplicado a esta página el nuevo cambio de imagen de la Web.
04/Noviembre/2004 Incluidos enlaces sobre C#: cursos, compiladores (Mono) y otros.
13/Enero/2004 La versión convertida a PDF de mi curso de C no se podía descargar, por limitaciones del servidor actual, que elimina los ficheros de más de 1 Mb de tamaño -> desglosada en dos mitades.
02/Abril/2003 Disponible una conversión a formato PDF de mi curso de C y C++ (2.27h), sólo recomendable para quien no use Windows.
05/Enero/2003 Nueva versión de mi curso de C y C++ (2.27h), con ejemplos de cómo crear gráficos con DJGPP y las librerías GRX o Allegro, notas sobre el compilador MinGW, y algún otro apartado ampliado.
08/Agosto/2002 Incluido un curso de Visual C en español, en formato PDF, creado por Daniel Villahermosa.
12/Abril/2002 Enlace a otro compilador de C (no de C++) para Windows: LCC-Win32.
29/Marzo/2002 Nueva versión de mi curso de C y C++ (2.26h). Añadido un nuevo enlace, que permite saber los cambios realizados entre versiones del curso.
16/Febrero/2002 Se puede descargar el HelpPC, una referencia en inglés sobre C, ensamblador, hardware, etc.
08/Febrero/2002 Añadido un curso de C en español creado por Angel Salas.
09/Enero/2002 Nueva versión del curso de C (2.25h), que incluye ya todos los temas que antes sólo tenía la versión ampliada.

Otros cambios anteriores en toda la Web

(Volver arriba)