Przy kompilacji warunkowej gdy makro przyjmuje różne wartości stosowanie dyrektywy #warning (akceptuje jedynie łańcuch znakowy) jest uciążliwe. Przykład:
Kod: Zaznacz cały
#undef ADPS
#define ADPS (_BV(ADPS0))
#if (F_CPU>>1)<50000
#warning ADC clock frequency < 50kHz, require ADC clock frequency between 50kHz and 200kHz
#endif
#if ((F_CPU>>1)>200000)
#undef ADPS
#define ADPS (_BV(ADPS1))
#endif
#if (F_CPU>>2)>200000
#undef ADPS
#define ADPS (_BV(ADPS1)|_BV(ADPS0))
#endif
#if (F_CPU>>3)>200000
#undef ADPS
#define ADPS (_BV(ADPS2))
#endif
#if (F_CPU>>4)>200000
#undef ADPS
#define ADPS (_BV(ADPS2)|_BV(ADPS0))
#endif
#if (F_CPU>>5)>200000
#undef ADPS
#define ADPS (_BV(ADPS2)|_BV(ADPS1))
#endif
#if (F_CPU>>6)>200000
#undef ADPS
#define ADPS (_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0))
#endif
#if (ADPS)==1
#warning ADPS: '_BV(ADPS0) //Prescale 2'
#endif
#if (ADPS)==2
#warning ADPS: '_BV(ADPS1) //Prescale 4'
#endif
#if (ADPS)==3
#warning ADPS: '_BV(ADPS1)|_BV(ADPS0) //Prescale 8'
#endif
#if (ADPS)==4
#warning ADPS: '_BV(ADPS2) //Prescale 16'
#endif
#if (ADPS)==5
#warning ADPS: '_BV(ADPS2)|_BV(ADPS0) //Prescale 32'
#endif
#if (ADPS)==6
#warning ADPS: '_BV(ADPS2)|_BV(ADPS1) //Prescale 64'
#endif
#if (ADPS)==7
#warning ADPS: '_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0) //Prescale 128'
#endif Czy jest jakiś inny sposób by można było bezpośrednio wyświetlić w oknie wyników kompilacji wartości makra ADPS w postaci wyliczonej lub niewyliczonej (rozwiniętej).