To mne pobavilo :-). Muzete nejaka makra zminit ? Ono tam toho je dost co muze byt potenc. nebezpecne, ale pri trose opatrnosti v tom nevidim takovy problem, API jako takove mi prijde celkem rozumne navrzene, doprasili to IMHO az zmenami, kdy uz v MS nejspis puvodni architekti z VMS nebyli...
Min a max jsou provalené. Ale z fleku mě napadají další dva ukázkové příklady:
1) Každá winapi funkce co bere jako parametr string je ve skutečnosti makro. Můžete třeba strávit spoustu času hledáním důvodu proč linker odmítá vaši třídu s metodou CreateFile. Makra nerozlišují třídy a metody a pak stačí aby do jednoho cpp to windows.h probublalo a do druhého ne. A CreateFile je jen jeden příklad z mnoha.
2) Strávil jsem hromadu času zjišťováním, proč mi funkce SetRange( float near, float far ) při kompilaci generuje úplně nesmyslné hlášky. Ještě, že jsem starý a pamatuju DOS. Nic z té chybové hlášky mi nenaznačilo, že se jméno far odmakrovalo do zapomnění.
C preprocesor a makra jsou past vedle pasti. Makra totálně ignorují jmenné prostory a pak záleží na pořadí includů. A ten strom includů je i pro relativně malé projekty něco, co lidský mozek nemá šanci rozumně pobrat. Proto se taky v novém kódu makra definují stylem FIRMA_PROJEKT_VLASTNI_JMENO aby to nemělo šanci vykonfliktit s nějakým příšetným jménem.
Winapi omlouvá jen to, že jeho návrháři ještě netušili, jakou prasárnu právě páchají.