Frage : Wie man die gleiche Software für das Führen des Arguments wie Wert in einer Plattform und Adresse in anderen benutzt?

In Plattform A, ist das Funktionsargument nicht unterzeichneter Wert.  In Plattform B, erfordert die Schnittstelle Adresse, anstelle vom value.

For geführt zu werden die höhere Software-Schicht, die den Funktionsanruf bildet, die Anforderung ist, den gleichen Satz Akten für Plattform A und Plattform B. zu benutzen.  Ich verursachte das folgende Makro, um sicherzustellen, dass die Funktion, die in Plattform A läuft, den Wert erhalten und die Funktion, die in Plattform B läuft, die Adresse erhält:

#ifdef PLATFORM_B
#define KANAL u. (cnfg->channel)
#else
#define KANAL cnfg->channel
#endif

Is dort eine bessere Weise, dieses Makro zu schreiben?
Is dort eine andere Lösung außer dem Makro?


The ist die höhere Schicht-Software, die den Funktionsanruf bildet, wie folgt:

typedef Lücke * channel_t;  /* Plattform B */
/* im channel_t ist Plattform A */

void im set_priority nicht unterzeichnet (channel_t Kanal, nicht unterzeichneter Wert);

typedef struct cnfg_s   cnfg_t;

typedef struct pulseidc_cnfg_s
{
nicht unterzeichneter Kanal;

};


void
some_init (work_t *work,
cnfg_t *cnfg
)
{

set_priority (KANAL, DIS_PRI);



Antwort : Wie man die gleiche Software für das Führen des Arguments wie Wert in einer Plattform und Adresse in anderen benutzt?

>> kann ich diese Informationen nicht zur Verfügung stellen, weil sie eigen ist.

Jetzt verstehe ich, warum Sie widerstrebend sind, meine Fragen offenbar zu beantworten;)

Da ich nicht weiß, über welche API Sie sprechen, habe ich nicht genügende Informationen, zum Sie zu helfen. Sie müssen die API-Unterlagen innen überprüfen, ob es eine Funktion gibt, die einen channel_t Wert in seine numerische Identifikation umwandelt

Etwas mögen:

        int getChannelId (channel_t c) {
                /* die Implementierung hier würde auf beiden Plattformen unterschiedlich sein, aber versteckt von Ihnen *
        }

In diesem Fall können Sie diese Funktion einfach benennen:

        wenn (
          (getChannelId (cnfg->channel) >= 0) &&
          (getChannelId (cnfg->channel) <>        )
Weitere Lösungen  
 
programming4us programming4us