Macro definición de notas de estudio

 
 

Reemplazo de macros:

Defina el nombre de la macro:

#define la memoria donde se reemplazará el nombre de la macro

Usa el nombre de la macro:

printf("%d\n", nombre de la macro);

Nota: En la etapa de preprocesamiento, el preprocesador reemplazará el nombre de macro utilizado por el código con el contenido después del nombre de macro.

Constantes de macros:

#define datos literales de nombre de macro

Utilice un nombre significativo para reemplazar los datos de valores literales sin sentido, lo que puede mejorar la legibilidad y la escalabilidad del código.

Macroexpresión:

#define expresiones de nombres de macros, operaciones, identificadores más complejos

#define STU_FORMAT "%s %c %hd %d"

#define sf scanf

#define YEAR_SEC (3600*24*365ul)

macros predefinidas:

Macros predefinidas del compilador:

__FILE__ Obtener el nombre del archivo actual

__func__ Obtiene el nombre de la función actual

__LINE__ Obtener el número de línea actual

__DATE__ obtiene la fecha actual

__TIME__ Obtener la hora actual

__WORDSIZE Obtiene el número de bits del compilador actual

Adecuado para mostrar mensajes de advertencia y error.

Macros predefinidas de la biblioteca estándar:

Los valores máximos y mínimos de todos los tipos de enteros definidos en el archivo de cabecera limits.h

#define SCHAR_MIN (-128)

#define SCHAR_MAX 127

#definir UCHAR_MAX 255

#define SHRT_MIN (-32768)

#define SHRT_MAX 32767

#definir USHRT_MAX 65535

#define INT_MIN (-INT_MAX - 1)

#definir INT_MAX 2147483647

#define UINT_MAX 4294967295U

#define LLONG_MAX 9223372036854775807LL

#define LLONG_MIN (-LLONG_MAX - 1LL)

#define ULLONG_MAX 18446744073709551615ULL

Función macro:

#define 宏名(a,b,c,...) a+b*c

Una función de macro no es una función real, sino una macro con parámetros, simplemente utilizada como una función.

Al usar una función de macro en el código, habrá dos sustituciones durante el preprocesamiento. La primera vez que la función de macro se reemplaza con una cadena de códigos y expresiones detrás de ella, y la segunda vez que los parámetros en la función de macro se reemplazan en la expresión .

Si el código detrás de la función macro tiene varias líneas, puede usar llaves para protegerlo.

#define el nombre de la macro(a,b,c,...) {código 1; código 2; ​​...}

El código detrás de la función macro no se puede ajustar directamente. Si el código es demasiado largo, puede usar el carácter de continuación para romper la línea.

#define el nombre de la macro(a,b,c,...) { \

código 1; \

código 2; ​​\

... \

}

#define intercambio(a,b) { \

char tmp[tamaño(a)]; \

memcpy(tmp,&a,tamaño(a)); \

memcpy(&a,&b,tamaño(a)); \

memcpy(&b,tmp,tamaño(a)); \

}

¿Ventajas y desventajas de las funciones ordinarias y las funciones macro?

Ventajas de las funciones macro:

1. La velocidad de ejecución es rápida, no es una llamada de función real, sino un reemplazo de código, y no experimentará parámetros de valor, saltos,

valor de retorno

2. No se comprobará el tipo de parámetros, por lo que es muy versátil.

Desventajas de las funciones macro:

1. Debido a que no es una llamada de función real, sino un reemplazo de código, cada vez que se usa, se reemplazará una copia del código, lo que provocará redundancia de código, una velocidad de compilación lenta y un archivo ejecutable de gran tamaño.

2. No hay valor de retorno y puede haber como máximo un resultado de ejecución.

3. La verificación de tipo no es estricta y la seguridad es baja.

4. No se pueden realizar llamadas recursivas.

Ventajas de las funciones:

1. En el caso de que no haya almacenamiento redundante, el código de la función solo se almacenará en el segmento de código. Cuando se usa, salta al pasado para la ejecución, regresa después de la ejecución y también se puede agregar el valor de retorno.

2. Alta seguridad, la verificación de tipos se realizará en los parámetros.

3. Se pueden realizar llamadas recursivas para implementar el algoritmo divide y vencerás.

Desventajas de las funciones:

1. En comparación con la función macro, su velocidad de ejecución es más lenta. Al llamar, pasará por el proceso de pasar parámetros, saltar, regresar, etc. Este proceso consume mucho tiempo.

2. Tipo específico, qué tipo de parámetro formal y qué tipo de parámetro real debe ser, que no se puede usar universalmente.

¿Qué tipo de código es adecuado para encapsular en una función de macro?

1. La cantidad de código es pequeña, incluso si se usa varias veces, no causará una redundancia excesiva en el segmento de código.

2. El número de llamadas es alto, pero el número de ejecuciones es alto.

3. No hay ningún requisito para el valor de retorno.

Cosas a tener en cuenta al diseñar macros:

1. No agregue un punto y coma al final.

2. Agregue paréntesis para evitar ambigüedades.

3. No utilice variables de autoincremento y autodecremento para proporcionar parámetros a las funciones de macro.

Supongo que te gusta

Origin blog.csdn.net/m0_62480610/article/details/125772477
Recomendado
Clasificación