"Bertel" == Bertel Lund Hansen <nospam@lundhansen.dk> writes:
> Hej alle
> Kan man teste om en funktion af typen void er implementeret? Jeg
> er interesseret i både ren C og C++.
> Aktuelt er problemet at vi har fået en træningsopgave med nogle
> terningslag hvor jeg ved hjælp af (uportable) conio-rutiner laver
> en tekstskærmsbaseret animation. Det ville være rart at kunne
> teste om det vil virke eller ej, for skolecompileren har ikke
> disse rutiner indbygget.
> altså
> #if rutiner_virker
> // ingenting
> #else
> void gotoxy(int a, int b) {}
> osv...
> #endif
Det er normalt den slags man bruger GNU autoconf til at komme
udenom. Men det er nok lidt rigeligt at kaste sig over. Du kan prøve
at se om der er forskel i hvilke præprocessor symboler der er
defineret på hhv. den ene og den anden compiler. F. eks. er __GNUC__
næppe defineret for andre compilere end gcc.
Ellers kan du muligvis være heldig at have ikke bare en, men derimod
2 compilere der supportere svage[1] symboler, men hvis de gør, er de nok
desværre uenige om hvordan man gør :-/
En helt tredie mulighed var at lade være med at gøre sig afhængig af
ikke-portable features.
[1] Et svagt symbol er en konstruktion der ikke giver en linkerfejl,
hvis der refereres til et ikke-eksisterende symbol. En af de
compilere jeg har set benytte sig af det gør sådan:
#pragma weak BSP_Initialize
if (BSP_Initialize != NULL)
BSP_Initialize();
Man kan mene hvad man vil om ovenstående, men det er åbenbart
begrænset hvad man får for 60.000 $
--
/Wegge