Arrays mit 0 Einträgen, warum verboten?



  • ich habe mal wegen dieser warnung nachgelesen,
    das mit dem [0] ist eine erweiterung von microsoft, die wurde mal vor jahren eingeführt,
    wenn man die microsoft extensions mit dem kompilerschalter /Za ausschaltet bekommt man eine fehlermeldung, aber mit der extension (/Ze), welche auch std.mässig aktiviert ist, bekomme ich jenach kompilerversion keine meldung oder nur diese warnung, das es sich eben um eine extension handelt,
    ich habe auch mal den metrowerks codewarrior probiert, und der kommt auch damit klar, ohne eine warnung,
    also kannst du sicher diese variante ohne probleme benutzen, du solltest nur prüfen, ob die von dir verwendeten kompiler sie unterstützen



  • bozo schrieb:

    ich habe mal wegen dieser warnung nachgelesen,
    das mit dem [0] ist eine erweiterung von microsoft, die wurde mal vor jahren eingeführt

    Hehe klar, und Tolkien hat die Orks von DSA geklaut.



  • @Bashar
    dann schau doch in die msdn, es sieht dort ganz danach aus

    hier noch was aus der msdn:

    The given member in the structure or union contains an array that does not have a subscript or that has a zero subscript. This kind of array is legal only as the last member of a structure or union.

    also geht auch folgendes:

    struct UDPPacket 
    { 
        unsigned long m_lMessageID; 
        unsigned short m_shMessageType; 
        unsigned short m_shSize; 
        char m_data[]; 
    };
    

    habe es mit vs und cw getestet, es geht



  • @bashar - hey! Flim Flam Funkel Licht ins Dunkel...
    Ach ja! 🕶



  • bozo schrieb:

    dann schau doch in die msdn, es sieht dort ganz danach aus

    Das wurde unter Unix schon gemacht, als Bill Gates noch im College gebettelt hat, an den Computer zu dürfen.



  • ChrisM schrieb:

    @Gerard: Sorry, aber was soll das bringen?

    keine doppelte allokation, einlesen ist leicht und keine probleme mit padding bytes, der impelemnetierungs aufwand ist aber etwas größer



  • Könnte ich dies vorschlagen:

    struct UDPPacket
    {
        unsigned long m_lMessageID;
        unsigned short m_shMessageType;
        unsigned short m_shSize;
        char&at(unsigned int a){return ((char*)this)[sizeof(UDPPacket)+a];}
    };
    


  • Das gehört zwar nicht zum Thema, aber warum castest du bei new()?



  • Hi,

    danke, meine Paketstruktur/-klasse geht jetzt, dank kingruedi sogar mit Reference Couting Smart Pointer. 🙂

    ChrisM



  • ChrisM schrieb:

    danke, meine Paketstruktur/-klasse geht jetzt, dank kingruedi sogar mit Reference Couting Smart Pointer. 🙂

    Reference Couting in multithread umgebeungen soll nicht so der renner sein, zumidestenz weiß ich das von strings
    außerdem bevor du refcount einbaust solltes du echt überlegen ob du das brauchst, es erzeugt probleme und es bringt dich auch nicht den ziel näher (etwas arbeitendes), wenn jemand refcounting haben will dann soll der boost::shared_ptr oder sonst was benutzen


Anmelden zum Antworten