Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Preprocesador y macros en C: Dominando #include, #define y compilación condicional

Preprocesador y macros en C

Explore el poder del preprocesador de C: aprenda a incluir cabeceras, definir constantes y funciones, y controlar el flujo de compilación con directivas condicionales.

Preprocesador y macros en C: Dominando #include, #define y compilación condicional

El preprocesador de C se ejecuta antes del compilador, transformando su código fuente expandiendo macros, incluyendo archivos de cabecera y evaluando declaraciones condicionales. Es una herramienta esencial para escribir código flexible y reutilizable.

Todas las directivas del preprocesador comienzan con un símbolo #. Por ejemplo:

#define PI 3.14

Inclusión de archivos de cabecera: #include

La directiva #include inserta el contenido de un archivo de cabecera directamente en su archivo fuente. Uso común:

#include <stdio.h>

Sin #include <stdio.h>, funciones como printf() y scanf() estarían indefinidas. También puede crear cabeceras personalizadas:

#include "mi_cabecera.h"

Las cabeceras personalizadas son útiles para agrupar declaraciones de funciones y constantes relacionadas.

Definición de constantes y expresiones: #define

Un macro reemplaza un token o expresión con un valor antes de la compilación. Ejemplo:

#define c 299792458 /* velocidad de la luz */

Usar c en cualquier parte de su programa se expande a 299792458.

Ejemplo 1: Definir PI

#include <stdio.h>
#define PI 3.1415
int main() {
    float radio, area;
    printf("Introduzca el radio: ");
    scanf("%f", &radio);
    area = PI * radio * radio;
    printf("Área=%.2f", area);
    return 0;
}

Macros tipo función

Los macros pueden aceptar argumentos, funcionando de forma similar a funciones inline:

#define circleArea(r) (3.1415 * (r) * (r))

Para circleArea(5), el preprocesador lo expande a (3.1415 * 5 * 5).

Ejemplo 2: Usando un macro tipo función

#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI * (r) * (r))
int main() {
    float radio, area;
    printf("Introduzca el radio: ");
    scanf("%f", &radio);
    area = circleArea(radio);
    printf("Área = %.2f", area);
    return 0;
}

Compilación condicional

Las directivas condicionales le permiten incluir o excluir bloques de código en tiempo de compilación, similar a sentencias if pero evaluadas antes de la ejecución.

Casos de uso comunes

Directivas clave

#ifdef MACRO /* código cuando MACRO está definido */ #endif
#if EXPRESIÓN /* código cuando EXPRESIÓN es no-cero */ #else /* código cuando EXPRESIÓN es cero */ #endif
#if EXPRESIÓN /* código */ #elif OTRA_EXPRESIÓN /* código alternativo */ #else /* código de respaldo */ #endif
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 /* búfer es suficientemente grande */ #endif

Macros predefinidas

MacroValor
__DATE__String de la fecha actual de compilación
__FILE__String del nombre del archivo actual
__LINE__Número de línea donde aparece el macro
__STDC__No-cero si el compilador sigue el estándar ANSI C
__TIME__String de la hora actual de compilación

Ejemplo 3: Mostrando hora de compilación

#include <stdio.h>
int main() {
    printf("Hora actual: %s", __TIME__);
    return 0;
}

Ejemplo de salida:

Hora actual: 19:54:39

Lecturas recomendadas

Lenguaje C

  1. Resumen Integral de Resistores, Inductores y Capacitores en Circuitos de CA
  2. Entendiendo palabras clave e identificadores en C#: Reglas, listas y mejores prácticas
  3. Clases y objetos en C#: Fundamentos para POO robusta
  4. Dominando clases y métodos abstractos en C#: Guía práctica
  5. Entendiendo clases y métodos parciales en C#
  6. Dominando clases y métodos sealed en C#: Cuándo usarlos, ejemplos claros y mejora de seguridad y rendimiento
  7. Dominando las Directivas de Preprocesador en C#: Guía Práctica
  8. Palabras clave e identificadores en C: guía práctica
  9. Entendiendo constantes y literales en C: Tipos, uso y mejores prácticas
  10. Dominando Entrada y Salida en programación C
  11. Entendiendo el Preprocesador de C (CPP): Cómo Simplifica la Compilación