Laboratorio de Circuitos Digitales y
Sistemas Embebidos
Introducción al Lenguaje C
Características del lenguaje
Paradigma procedural
Minimalidad
Versatilidad, a un precio
Portabilidad
Biblioteca Standard
Evolución del lenguaje
El ciclo de compilación
Compilador
Vinculador, linkeditor o
linker
Bibliotecario
Un primer ejemplo
Estructura del programa
Compilación del programa
El comando make
Mapa de memoria de un programa
Ejercicios
El preprocesador
Directivas de preprocesador
Símbolos y macros
Headers
Definición de símbolos
Definición de macros
Macros vs. funciones
Compilación condicional
Observaciones
Ejercicios
Tipos de datos y expresiones
Declaración de variables
Tamaños de los objetos de datos
Operaciones con distintos tipos
Truncamiento en asignaciones
Promoción automática de expresiones
Operador cast
Reglas de promoción en expresiones
Observaciones
Una herramienta: printf()
Ejercicios
Constantes
Constantes numéricas
Constantes enteras
Constantes long
Constantes unsigned
Constantes de punto flotante
Constantes string
El cero final
Constantes de carácter
Constantes de carácter en strings
Constantes enumeradas
Ejercicios
Propiedades de las variables
Alcance de las variables
Vida de las variables
Clases de almacenamiento
Variables y mapa de memoria
Liga
Declaraciones y definiciones
Modificadores especiales
Ejercicios
Operadores
Operadores aritméticos
Abreviaturas
Operadores de relación
Operadores lógicos
Constantes lógicas
Operadores de bits
Operadores especiales
Inicialización
Asignación
Operador ternario
Precedencia y orden de evaluación
Resumen
Ejercicios
Estructuras de control
Estructura alternativa
Estructuras repetitivas
Estructura while
Estructura do-while
Estructura for
Estructura de selección
Transferencia incondicional
Sentencia continue
Sentencia break
Sentencia goto
Sentencia return
Observaciones
Ejercicios
Funciones
Declaración y definición de funciones
Prototipos de funciones
Redeclaración de funciones
Recursividad
Ejercicios
Variables estructuradas
Arreglos
Inicialización de arreglos
Errores frecuentes con arreglos
Arreglos multidimensionales
Estructuras y uniones
Estructuras
Uniones
Campos de bits
Ejercicios
Apuntadores y Direcciones
Operadores especiales
Aritmética de punteros
Asignación entre punteros
Suma de enteros a punteros
Resta de punteros
Punteros y arreglos
Punteros y cadenas de texto
Pasaje por referencia
Punteros y argumentos de funciones
Ejercicios
Errores más frecuentes
Punteros sin inicializar
Confundir punteros con arreglos
No analizar el nivel de indirección
Arreglos de punteros
Estructuras referenciadas por punteros
Estructuras de datos recursivas
Construcción de tipos
Asignación dinámica de memoria
Punteros a funciones
Aplicación de punteros a funciones
Punteros a punteros
Una herramienta: gets()
Ejercicios
Entrada/Salida Standard
Funciones de E/S Standard
E/S standard de caracteres
E/S standard de líneas
E/S standard con formato
E/S standard sobre strings
E/S sobre archivos
Estándares ANSI y POSIX
Funciones ANSI C de E/S sobre archivos
Funciones ANSI C de caracteres sobre archivos
Funciones ANSI C de líneas sobre archivos
Funciones ANSI C con formato sobre archivos
Funciones ANSI C de acceso directo
Constantes de posicionamiento
Sincronización de E/S
Resumen de funciones ANSI C de E/S
Funciones POSIX de E/S sobre archivos
Apertura de archivos
Posicionamiento en archivos
Ejercicios
Comunicación con el ambiente
Redirección y piping
Variables de ambiente
Argumentos de ejecución
Salida del programa
Opciones
Ejercicios
La Biblioteca Standard
Cadenas o strings
Listas de argumentos variables
Tratamiento de errores
Funciones de fecha y hora
Funciones matemáticas
Funciones utilitarias
Clasificación de caracteres
Ejercicios
Ejercicios avanzados