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
#error
A 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 STM32F2XX
esta macro no está definida, no se compilará, en otras palabras, si el programa se va a compilar correctamente, se debe definir STM32F2XX.
warning
El 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_BASE
el 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-function
advertencia 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.