Preprocesor nie ma nic wspólnego z wyliczeniami. Ale twój przykład kompiluje się bezbłędnie, więc co się dzieje z dyrektywą #if MAX > 42
?
Gdy preprocesor jest obsługa warunkową dyrektywy, wszelkie identyfikatory, które nie są zdefiniowane jako makra są traktowane jako 0. Więc zakładając, że MAX
nie jest zdefiniowana w innym miejscu jako makro, Twój fragment kodu odpowiada:
enum{
A,
B,
MAX
}
#if 0 > 42
# error "Woah! MAX is a lot!"
#endif
od C99 6.10.1/3 „warunkowa włączenie”:
... Po każdej wymianie ze względu na makr i określonej operatora jednoargumentowy przeprowadzono wszystkie pozostałe identyfikatory zastąpiony przez numer pp 0, a następnie każdy token przetwarzania wstępnego to przekształcony na token. ...
To samo sformułowanie ma standard C89/C90.
wyliczenia nie mają nic wspólnego z preprocesorem. –
@ Michael Burr, Powyższy kod faktycznie kompiluje się bez ostrzeżeń w MSVC6.0. To jest C89 - jak. – Vorac
Myślę, że nie kompiluje się z podwójnym "u" w enum! –