Vraag : Hoe te om zelfde software voor het overgaan van argument als waarde in één platform en adres in een andere te gebruiken?

In Platform A, is het functieargument niet ondertekende waarde.  In Platform B, vereist de interface dat het adres wordt overgegaan in plaats van value.

For de hogere softwarelaag die de functievraag maakt, het vereiste is zelfde reeks dossiers voor Platform A en Platform B. te gebruiken.  Ik cre�ërde de volgende macro om te verzekeren de functie die in Platform A lopen de waarde krijgt en de functie die in Platform B lopen het adres krijgt:

#ifdef PLATFORM_B
#defineKANAAL & (cnfg->channel)
#else
#defineKANAAL cnfg->channel
#endif

Is daar een betere manier om deze macro te schrijven?
Is daar een andere oplossing naast de macro?


The is de hogere laagsoftware die de functievraag maken als volgt: leegte

typedef * channel_t;  /* in Platform B */
/* channel_t niet ondertekend in set_priority/>
void van het Platform A */

typedef struct cnfg_s   cnfg_t;

typedef struct pulseidc_cnfg_s
{/> niet ondertekend kanaal
};


void
some_init (work_t *work,
cnfg_t *cnfg
)
{/> set_priority




Antwoord : Hoe te om zelfde software voor het overgaan van argument als waarde in één platform en adres in een andere te gebruiken?

>> Ik kan niet deze informatie verstrekken omdat het merkgebonden is.

Nu begrijp ik waarom u aarzelt om mijn vragen duidelijk te beantwoorden;)

Aangezien ik weet welke niet API u over spreekt, heb ik genoeg informatie niet om u te helpen. U zult moeten controleren in de API documentatie of er een functie is die een channel_twaarde in zijn numerieke identiteitskaart omzet

Iets als:

        int. getChannelId (channel_t c) {
                /* de implementatie zou hier op beide platforms verschillend zijn, maar verborgen van u */
        }

In dat geval, kunt u deze functie eenvoudig roepen:

        als (
          (getChannelId (cnfg->channel) >= 0) &&
          (getChannelId (cnfg->channel) <>        )
Andere oplossingen  
 
programming4us programming4us