Programación en C sobre sistemas GNU/Linux

De LUGLi, la enciclopedia libre.

En este documento se pretende describir las herramientas básicas que se pueden usar para programar en C sobre sistemas GNU/Linux. Uno de los objetivos de poner esta información toda junta en un lugar es que esté disponible para alumnos de materias que incluyen o tratan específicamente de la programación C en su currícula, para que puedan cursar esas materias usando software libre.

(Nota: a continuación está el esqueleto del documento, que actualmente está en desarrollo, así que son más bien un conjunto de notas a rellenar, más que el documento terminado)

TERMINARRR!!!!!!!!!!!!!!!!!!

Tabla de contenidos

1. Componentes de un sistema de desarrollo

1.1. Plataforma de hardware

  • costo
  • performance
  • herramientas
  • tipo de desarrollo (nativo, cross)

1.2. Sistema operativo (idem)

1.3. Editores

  • comprende sintaxis
  • colapsado de contexto (plegado)
  • soporte de TAGS
  • apertura de multilpes archivos
  • facilidad para copy paste search replace
  • multiples ventanas
  • admite funciones y macros definidas por el usuario

1.4. Compiladores y ensambladores

1.5. Depuradores

1.6. Sistemas de control de versión

  • integracion con el editor

1.7. Mecanismos de colaboración: email, otros

1.8. X Window

  • mejora la presentacion de editores

2. Trabajar con un editor

2.1. ¿Qué se busca en un editor?

  • Extensibilidad
  • Comprensión de la sintaxis
  • Soporte para etiquetas (tags)
  • Plegado del código

2.2. Vim

2.2.1. Conceptos

  • modos Normal e Insert
  •  :help tutor

2.2.2. Edición básica

  • h j k l < v ^ >
  • W una palabra adelante
  • E una palabra atras
  • () previa proxima sentencia
  • {} previo proximo paragrafo
  • a append
  • i insert
  • r reemplaza letra en el cursor
  • R reemplaza letra desde el cursor en adelante
  • x borra letra cursor
  • dd borra renglon
  • D borra desde el cursor hasta el final de renglon

2.2.3. Uso de Tags con Vim

  • ctags-exuberant -R arma el directorio tags
  • poner el cursor en el nombre de la función y ^]
  • escribir :tag nombre
  •  :tags muestra la lista de saltos que hice en la sesion

2.2.4. Plegado de código

  •  :set foldmethod=indent
  •  :foldclose[!] pliega los que estan en rango
  •  :foldopen[!] despliega los que estan en rango
  • zc pliega bajo el cursor
  • zo despliega bajo el cursor

3. El compilador GNU GCC

3.1. Compilación simple

  • gcc
  • el archivo a.out
  • gcc -o

3.2. Tipos de archivos

  • C .c
  • C++ .cc .cp .cxx .cpp .C .c+
  • Objetive C .m
  • Fortran .F .fpp FPP
  • cabecera .h
  • C sin cpp .i
  • C++ sin cpp .ii
  • assembler .S
  • assembler sin cpp .s

3.3. Compilación a niveles intermedios

  • creacion de assembler gcc -S pepe.c as pepe.s

3.4. Compilación con soporte para depuración

  • gcc -c -g pepe.c

3.5. Compilación con optimización

gcc -O2 optimiza gcc -O0 apaga optimizacion cuidado con la depuracion

int main(void) { int a,b,suma; a=4; b=3; suma=a+b; printf("la suma es: %d\n", suma); }

con optimizaciones se transforma en:

printf("la suma es: %d\n", 7);

3.6. Enlace estático y dinámico

  • ldd ejecutable
  • strip quita simbolos de depuracion
  • gcc -static

3.7. Archivos de encabezado

  • /usr/include/

4. Make

4.1. Introducción a Make

  • Terminología básica
  • Archivos de entrada
  • Ejecución de make

4.2. Las reglas de make

  • Anatomía de una regla
  • Makefile básico
  • Reglas explícitas
  • Reglas implícitas

4.3. Uso de variables

  • Definición de variables
  • Tipos de variables
  • Variables predefinidas
  • Variables automáticas

5. El depurador GNU GDB

5.1. Primeros pasos con GDB

5.1.1. Mandatos más usuales con GDB

  • next toma la funcion como un solo paso
  • step se mete en la funcion
  • run corre
  • quit salir del gdb
  • print expersion
  • continue hasta el fin del programa o hasta el proximo breakpoint
  • list muestra el listado del programa

5.1.2. Sesión de ejemplo con GDB

gdb pepe list list 1.14 list 5 list 9 : break nombre.c:linea run args n quit

set args arg1 arg2 show args

break main

   finish
       termina la ejecucion de la funcion actual 

5.3. Ver las variables

  • Ver variables del programa
    • print nombre
  • Ver automáticamente las variables luego de cada comando
    • display nombre (es como el watch de otros ides)
    • undisplay la quita de la lista
    • disable display apaga el listado permo mantiene la lista de variables
    • enable display vuelve a mostrarlas luego de cada comando
  • Ver las variables de entorno
    • show environment
    • show path
  • Modificar las variables
    • set nombre=valor

5.4. Uso de puntos de detención (breakpoints)

  • agregar
    • break arch.c:linea
      • info break para ver listado
      • break main en el comienzo
      • break 8 en el archivo actualmente cargado
    • continuar
      • continue hasta que termina o que hay otro breakpoint
    • deshabilitar
      • info break dis 3 el tercer breakpoint
    • habilitar enab 3
    • eliminar del 3

6. Control de versión con CVS

6.1. Introducción

6.2. Cliente de CVS

  • obtener el código (check out)
  • guardar los cambios realizados (check in)

7. Enlaces relacionados

  • http://ar.geocities.com/uap_c2a/ Material que escribí para la asignatura «Computación II (A)» que dicto para segundo año de la Licenciatura en Sistemas de Información, en la Universidad Adventista del Plata. Hay una buena cantidad de los ejercicios del K&R resueltos con pistas para modificaciones.
  • http://konst.org.ua/motor/ motor: un entorno integrado de edición C que llama al compilador de C, y al depurador. Apto para consola de texto, no para X Window.
  • http://www.dosemu.org: Para correr la momia antes mencionada, será de utilidad tener configurado el emulador de DOS DOSEmu. Si necesitan un sistema DOS pueden usar el sistema libre denominado FreeDOS: http://www.freedos.org
  • http://marmota.act.uji.es/MTP/teoria.shtml Apuntes de teoría (Python y C) de Metodología y Tecnología de la Programación, por Andrés Marzal e Isabel Gracia, de la Universitat Jaume I (no lo he visto yo personalmente, pero me lo han recomendado) En formato PDF separado por capítulos. Sólo se puede reproducir para uso autodidacta o en centros públicos de enseñanza, está prohibido su uso comercial y/o con fines de lucro.
Personal tools