Compartir tecnología

Preprocesamiento en "lenguaje C"

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Símbolos predefinidos

El lenguaje C establece algunos símbolos predefinidos que pueden usarse directamente y procesarse durante el preprocesamiento.

__FILE__//进行编译的源文件
__LINE__//文件当前的行号
__DATE__//文件被编译的日期
__TIME__//文件被编译的时间
__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义
  • 1
  • 2
  • 3
  • 4
  • 5

Resultados de la prueba:
Insertar descripción de la imagen aquí

2. #define define constantes

#define se usa para escribir la definición al definir una constante:

#define MAX 100
  • 1

La regla lógica es reemplazar directamente MAX con 100 cuando aparece en el siguiente código. Este paso de operación se completa en la etapa de preprocesamiento. Generalmente, cuando se usa #define para definir una constante, el nombre se escribe en mayúsculas.

escenas a utilizar:
Insertar descripción de la imagen aquí

3. #define define macros

Cuando se usa #define para definir macros, el método es similar al de las funciones, pero la lógica es reemplazo. Al reemplazar, las variables deben estar entre paréntesis para evitar problemas de prioridad del operador y resultados inesperados.
Cómo utilizar:

#define MAX(x,y) ((x) > (y) ? (x) : (y))
  • 1

Esta es una macro escrita para completar el juicio del valor directamente mayor de dos números. Tenga en cuenta que los corchetes después del nombre de la macro deben estar cerca de la macro.

Caso de uso:
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

A través de los dos casos anteriores, podemos encontrar que las macros no limitan el tipo al pasar parámetros. Si se pasa la función, el tipo de retorno de la función es fijo y la macro se ejecuta más rápido.

4. Comparación de funciones de actualización de macros

Ventajas de las macros:

  • 1. Al realizar cálculos con una pequeña cantidad de código, el tiempo de trabajo de las macros es más corto que el de las funciones.
  • 2. Más importante aún, los parámetros de la función deben declararse con tipos específicos. Las macros se pueden aplicar a varios tipos que se pueden comparar usando >. El tipo de macro es irrelevante.

Desventajas de las macros:

    1. Cada vez que se utiliza una macro, se insertará una copia del código de definición de la macro en el programa. A menos que la macro sea relativamente corta, esto puede aumentar significativamente la duración del programa.
    1. Las macros no se pueden depurar.
    1. Dado que las macros son independientes del tipo, no son lo suficientemente rigurosas.
    1. Las macros pueden causar problemas de precedencia de operadores, haciendo que los programas sean propensos a errores.

Tabla comparativa de macros y funciones:

Atributos#definir macros definidasfunción
longitud del código La macro se inserta en el programa cada vez que se utiliza.Excepto por macros muy pequeñas, la duración del programa aumentará significativamenteEl código de función solo aparece en un lugar; cada vez que se usa, se llama al mismo código en ese lugar;
Velocidad de ejecuciónmás rápidoExiste la sobrecarga adicional de las llamadas y devoluciones de funciones, que es más lenta.
precedencia del operadorLos parámetros de macro se evalúan en el contexto de todas las expresiones circundantes, a menos que se incluyan paréntesis, la precedencia de operadores adyacentes puede tener consecuencias impredecibles, por lo que se recomienda escribir las macros con más paréntesis. Los parámetros de la función solo se evalúan y pasan a la función cuando se llama a la función. Las expresiones se evalúan de forma predecible.
Parámetros con efectos secundarios.Los parámetros se pueden sustituir en varias ubicaciones dentro del cuerpo de la macro y, si los parámetros de una macro se evalúan varias veces, la evaluación de parámetros con efectos secundarios puede producir resultados impredecibles.Los parámetros de función solo se evalúan al pasar parámetros y son fáciles de controlar.
Tipo de parámetroLos parámetros de la macro no tienen nada que ver con el tipo. Siempre que la operación sobre los parámetros sea legal, se puede utilizar para cualquier tipo de parámetro.Los parámetros de la función están relacionados con el tipo. Si son diferentes, se necesitan funciones diferentes y las tareas son diferentes.
depurarLas macros son incómodas de depurarLas funciones se pueden depurar declaración por declaración
recursividadLas macros no pueden ser recursivasLas macros no pueden ser recursivas

5. # y ##

1. #operador

El #operator convierte un argumento de una macro en una cadena literal. Sólo se permite aparecer en la lista de sustitución de una macro con parámetros.
La operación realizada por el operador # puede entenderse como "stringificación".

Ejemplo de uso:
Insertar descripción de la imagen aquí

2. ## operador

## puede combinar los símbolos de ambos lados en un solo símbolo, lo que permite que las definiciones de macros creen identificadores a partir de segmentos de texto separados.pegamento para marcadores
Una conexión de este tipo debe producir un identificador válido. De lo contrario, el resultado no está definido. Pensemos en ello aquí. Al escribir una función para encontrar el valor mayor de dos números, se deben escribir diferentes funciones para diferentes tipos de datos.

Ejemplo de uso:
Insertar descripción de la imagen aquí