Uso inteligente de advertencias de compilación #advertencias y errores de compilación #error

1. Introducción

Las advertencias y errores de compilación son cosas muy comunes para los programadores. Pero para los programadores serios, cualquier advertencia es intolerable.

2. Úselo sabiamente

#errorA menudo se utiliza al configurar un entorno o trasplantar un sistema operativo. Se utiliza para indicarle al trasplantador que se requiere una configuración específica; de lo contrario, no se utilizará. Por ejemplo, el siguiente código:

#if !defined (STM32F2XX)
 #error "Please select first the target STM32F2XX device used in your application (in stm32f2xx.h file)"
#endif

El código anterior muestra que si STM32F2XXesta macro no está definida, no se compilará, en otras palabras, si el programa se va a compilar correctamente, se debe definir STM32F2XX.

warningEl nivel de gravedad de #error no es tan alto como el de #error. A menudo se utiliza para recordar a los programadores que es posible que sea necesario modificar este lugar de acuerdo con la situación real del programa. Si no se modifica, se ejecutará. por defecto Por ejemplo, el siguiente código:

#ifdef VECTOR_BASE
    SCB->VTOR = VECTOR_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation */
#else
    #warning no define VECTOR_BASE
#endif

El código anterior muestra que si está definido, VECTOR_BASEel vector de interrupción se configurará de acuerdo con el valor definido. Si VECTOR_BASE no está definido, la configuración del vector de interrupción se omitirá y se utilizará el valor de reinicio. Sin embargo, se emitirá una advertencia. durante la compilación para recordar al programador si es necesario configurar el vector de interrupción de acuerdo con el valor definido. Se requiere una configuración real.

3. Bloquear activamente advertencias específicas

En algunos escenarios, también podemos bloquear activamente advertencias específicas dentro de códigos o alcances de archivos específicos.

Por ejemplo, si el código escribe una función "void TestFunction(void)", pero aún no se ha llamado, recibirá una Wunused-functionadvertencia si lo compila directamente. Pero si agrega la siguiente declaración a su código:

#pragma GCC diagnostic ignored "-Wunused-function"

/* 此区间内,如果出现函数仅申明,但是没有被调用时,编译不产生warning */
void TestFunction(void)
{
    
    
	flash_test();
}

#pragma GCC diagnostic pop 

Debido a que configuramos la "función-Wunused", incluso si no se llama a TestFunction durante la compilación, la compilación no generará una advertencia.

Además, también podemos consultar la documentación del compilador GCC para descubrir más opciones de advertencia y bloquear activamente más advertencias según sea necesario.

Supongo que te gusta

Origin blog.csdn.net/weixin_40837318/article/details/131492495
Recomendado
Clasificación