Fundamentos de Programación: Variables y Operadores Esenciales
La programación en C es la base de muchos sistemas, compiladores y aplicaciones de bajo nivel. Este material ofrece una visión práctica y estructurada para estudiantes universitarios, centrándose en conceptos de diseño, estructura de programas, control de flujo, modularidad, manejo de memoria dinámica, depuración y buenas prácticas. No se tratan aquí Variables, Tipos de datos ni Operadores, ya que se cubren en otros módulos.
Definición: El lenguaje C es un lenguaje de programación de propósito general, de bajo nivel relativo, diseñado para permitir control preciso del hardware y eficiencia en la ejecución.
#include, #define y macros.main como punto de entrada.Definición: Una directiva de preprocesador es una instrucción procesada antes de la compilación que modifica el texto fuente, típicamente para incluir cabeceras o definir macros.
#include <stdio.h>
void saludar(void); // prototipo
int main(void) {
saludar();
return 0;
}
void saludar(void) {
printf("Hola, mundo\n");
}
Aunque no revisamos operadores específicos, es importante entender la lógica que gobierna el flujo: if, switch, for, while, do...while, y el uso de break y continue.
switch para seleccionar entre múltiples casos discretos.Definición: Un bucle es una estructura de control que repite un bloque de código mientras se cumpla una condición.
#include <stdio.h>
int main(void) {
int opcion = 1; // ejemplo
switch (opcion) {
case 1:
printf("Seleccionó 1\n");
break;
case 2:
printf("Seleccionó 2\n");
break;
default:
printf("Opción inválida\n");
}
return 0;
}
Definición: Una interfaz en C típicamente se expresa mediante un archivo de cabecera
.hque contiene declaraciones de funciones, macros y tipos públicos.
math_utils.h con prototiposmath_utils.c con implementacionesmain.c que incluye math_utils.hmalloc, calloc, realloc y free son funciones esenciales para la gestión dinámica.malloc no devuelva NULL antes de usar la memoria.Definición: Un puntero es una variable que almacena la dirección de memoria de otra variable o bloque de memoria.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *arr = malloc(10 * sizeof *arr);
if (arr == NULL) {
perror("malloc");
return 1;
}
// uso de arr
free(arr);
return 0;
}
| Función | Inicialización | Uso típico | Comentario |
|---|---|---|---|
| malloc | No inicializa | Asignar $n$ bytes | Rápido, requiere inicializar si se necesita valor cero |
| calloc | Inicializa a cero | Asignar $n$ elementos de $m$ bytes | Útil para estructuras inicializadas a cero |
| realloc | Conserva/ajusta memoria | Cambiar tamaño de un bloque asignado | Puede mover el bloque; verificar puntero devuelto |
¿Ya tienes cuenta? Iniciar sesión
Klíčové pojmy: Comprender la estructura básica de un programa en C, incluyendo preprocesador, prototipos y main, Separar interfaz e implementación mediante archivos .h y .c para mejorar modularidad, Diseñar funciones pequeñas con una sola responsabilidad, Usar punteros para pasar por referencia y modificar datos desde funciones, Gestionar memoria dinámica con malloc, calloc, realloc y free verificando retornos, Evitar desbordamientos de buffer validando límites al indexar arrays, Depurar con gdb, valgrind y sanitizers; reproducir fallos con casos mínimos, Seguir buenas prácticas de estilo: comentarios claros, nombres consistentes y funciones cortas, Verificar y manejar errores de asignación de memoria comprobando si punteros son NULL, Preferir pruebas unitarias y casos de prueba mínimos para detectar regresiones