Variablen/Strukturen initialisieren

  • Ich habe da mal eine Frage an C-Crack's. Ich habe folgendes Konstruckt:


    Eine Struktur soll einen Zeiger auf eine Funktion enthalten. Beim Aufruf der Funktion, soll diese einen Zeiger auf genau solch eine Struktur als Parameter erhalten. Es wird ein vorinitialisiertes Array dieser Struktur angelegt.


    Zum Editieren und für Modultests verwende ich Visual Studio. Visual Studio mault über die Initialisierung von my_vars in Zeile 26 rum, der Targetcompiler nicht:


    warning C4047: 'Initialisierung': Anzahl der Dereferenzierungen bei 'unsigned char *' und 't_in_handler (__cdecl *)' unterschiedlich


    Wie kann ich ohne Warnung initialisieren??


    Ich möchte ein union Konstrukt verwenden, da das Array relativ groß ist und nicht viel ROM frei bleiben wird.


    Gruß
    e9hack

  • Kann gerade nicht nachsehen, aber müsste der function pointer nicht so aussehen?

    Code
    typedef void (*t_in_handler)(const struct tag_t_var* var, const unsigned char* in);


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Und dazu auch das, denk ich mal..


    Code
    const t_var my_vars[] = {  {4,  &in_no_check_handler, my_data}  };
  • Bei ISO-C muß der Initialsierer den Typ vom ersten Element im union haben. Da mein Target-Compiler alles richtig macht, werde ich jetzt Visual Studio vergewaltigen.


    Für mein Zielsystem will ich nichts type-casten, da Daten- und Kodezeiger unterschiedliche Größen haben (16 und 32 Bit).


    gda
    Ich definiere einen Typ für die Funktion und erzeuge im union dann einen Pointer per *-Operator.


    wirbel
    Visual Studio kommt mit beiden Versionen klar. Der Target-Compiler versteht meine Variante. Ob er beides kann, kann ich erst am Montag testen.


    Gruß
    e9hack

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!