Cómo flashear un error si una macro no está definida en el programa

Quiero que mi programa muestre un error de tiempo de compilación como "LCD_PORT no definido" si no está definido en el programa mismo. Para eso modifiqué el archivo de encabezado así

.
.
.
#if LCD_IO_MODE
#ifndef LCD_PORT
#error LCD_PORT not defined //(e.g. #define LCD_PORT PORTA/B/C/D)
#endif

#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
.
.
.
...

Pero incluso después de definir LCD_PORT (como en el siguiente programa), parpadea el error.

#include <avr/io.h>
#include <lcd.h>

#define LCD_PORT PORTA

int main(void)
{
    lcd_init(LCD_DISP_ON_CURSOR); 
    lcd_home();
    lcd_gotoxy(0,4);
    lcd_puts("Hello world!!");
}
La modificación de los archivos de encabezado de distribución es una mala práctica. ¿Por qué no mover estas líneas a su propio código fuente?

Respuestas (1)

Es probable que el problema sea que el preprocesador opera secuencialmente, por lo que debe realizar la definición antes de la inclusión. Prueba lo siguiente:

#include <avr/io.h>
#define LCD_PORT PORTA
#include <lcd.h>
Exactamente. El encabezado incluido se procesa antes de que se alcance el #define.