Столкнулся с тем, что при программировании для Windows, нужны различные константы, которые описаны в h файлах, например:
#if(_WIN32_WINNT >= 0x0501)
#define WM_UNICHAR                      0x0109
#define WM_KEYLAST                      0x0109
#define UNICODE_NOCHAR                  0xFFFF
#else
#define WM_KEYLAST                      0x0108
#endif /* _WIN32_WINNT >= 0x0501 */

WM_KEYLAST может принимать значение 0x0109 или 0x0108 в зависимости от версии Window. Поэтому задумался о реализации препроцессора для Oberon-07М, один из вариантов, просто взять синтаксис команд препроцессора из языка Си и реализовать их в препроцессоре для Oberon-07М. Другой подход это не копировать из языка Си, а сделать свое, возможно, лучше, чем там. Сейчас считаю книгу "Расширяемые программы" Горбунов-Посадов и думаю на тем, можно ли использовать вариантные гнезда и как их лучше реализовать.

Кто как думает, какой вариант лучше первый или второй, а если второй, то как лучше это реализовать?