Struct in Struct



  • ~fricky schrieb:

    Javaner schrieb:

    Wie sollte der Compiler denn auch z.B. die Größe von test1 bestimmen können,
    ohne vorher die Größe von test2 zu kennen?

    er könnte sich die datei zwei mal vorknöpfen.
    🙂

    Ein ANSI-C-Compiler? Darf er nicht machen (können)!



  • Javaner schrieb:

    Ein ANSI-C-Compiler? Darf er nicht machen (können)!

    sowas hab' ich mir schon gedacht. hat das eigentlich einen vernünftigen grund? oder nur so, weil's so festgelegt wurde?
    🙂



  • ~fricky schrieb:

    Javaner schrieb:

    Ein ANSI-C-Compiler? Darf er nicht machen (können)!

    sowas hab' ich mir schon gedacht. hat das eigentlich einen vernünftigen grund? oder nur so, weil's so festgelegt wurde?
    🙂

    Vielleicht damit die Leute verständlich(er)en Code schreiben ?



  • Korhil schrieb:

    Vielleicht damit die Leute verständlich(er)en Code schreiben ?

    was ist an:

    struct t1
    {
     struct t2 a;
     int b;
    };
    
    struct t2
    {
     int c;
    };
    

    unverständlich?
    es ist doch eher so, daß unerfahrene c-coder sich wundern, warum der compiler hier fehlermeldungen ausspuckt.



  • ~fricky schrieb:

    Korhil schrieb:

    Vielleicht damit die Leute verständlich(er)en Code schreiben ?

    was ist an:

    struct t1
    {
     struct t2 a;
     int b;
    };
    
    struct t2
    {
     int c;
    };
    

    unverständlich?
    es ist doch eher so, daß unerfahrene c-coder sich wundern, warum der compiler hier fehlermeldungen ausspuckt.

    Wie kann ich mit etwas arbeiten, wenn ich es noch nicht kenne ? Oder liest du Gebrauchsanweisungen auch rückwärts ?
    Frei nach dem Motto:
    Mauern Sie das Erdgeschoss fertig und setzen es dann auf's Fundament.



  • Korhil schrieb:

    Wie kann ich mit etwas arbeiten, wenn ich es noch nicht kenne?

    deshalb sagte ich ja: ein compiler könnte sich das file zweimal ansehen. das er's nicht darf, ist eine sache. aber warum er's nicht darf, würde mich mal interessieren.

    Korhil schrieb:

    Oder liest du Gebrauchsanweisungen auch rückwärts ?

    ich suche gezielt das raus, was mich interessiert. fehlen mir informationen, dann suche ich weiter, manchmal auch rückwärts.
    🙂



  • Korhil schrieb:

    ~fricky schrieb:

    unverständlich?
    es ist doch eher so, daß unerfahrene c-coder sich wundern, warum der compiler hier fehlermeldungen ausspuckt.

    Wie kann ich mit etwas arbeiten, wenn ich es noch nicht kenne ? Oder liest du Gebrauchsanweisungen auch rückwärts ?
    Frei nach dem Motto:
    Mauern Sie das Erdgeschoss fertig und setzen es dann auf's Fundament.

    C-Compiler sind v.a. durch den Präprozessor Multipass- analytisch aufgebaut, aber in der Hinsicht auf Funktionen beschränkt. Pascal (2-pass) braucht wg. sowas fwd- declarations, C seine Prototypen. Daß es bei Multipass eigentlich auch anders geht, zeigen Implementationen, die forwarding auch bei structs schlucken, aber Warnings anmeckern. Ich hab`so ein Exemplar gerade hier am Bastel- PC.
    Inwieweit das zur (Un)lesbarkeit von Source beiträgt, sei dahingestellt, ob sich das mit neueren Standards verträgt, entzieht sich völlig meiner Kenntnis.



  • ~fricky schrieb:

    Javaner schrieb:

    Ein ANSI-C-Compiler? Darf er nicht machen (können)!

    sowas hab' ich mir schon gedacht. hat das eigentlich einen vernünftigen grund? oder nur so, weil's so festgelegt wurde?
    🙂

    Das liegt daran, daß mit Erscheinen der Sprache C Compiler die
    mehrfach einen Quellcode hätten compilieren müssen zu "teuer"
    waren und deswegen bei der Definition der Sprache C dem Rechnung
    getragen wurde indem Compiler einen Quellcode in einem Rutsch
    übersetzen können mußten.

    Da ANSI-C eine genormte Definition der Sprache C ist, wurde
    ANSI-C natürlich auch so definiert, daß es das alte C definiert (beinhaltet?)



  • ~fricky schrieb:

    ein compiler könnte sich das file zweimal ansehen. das er's nicht darf, ist eine sache. aber warum er's nicht darf, würde mich mal interessieren.

    c ist *uralt*. als c erfunden wurde waren die rechner noch so langsam, daß das compilieren eines größeren programms stunden dauern konnte. deshalb sah man das einhalten der deklarationsreihenfolge als das kleinere übel an. seit dem haben sich die c-programmierer daran gewöhnt und kämen garnicht mehr auf die idee, daran noch etwas ändern zu wollen.

    PS: habe nicht gemerkt, daß eine antwort schon gepostet wurde.



  • Konfusius schrieb:

    c ist *uralt*. als c erfunden wurde waren die rechner noch so langsam, daß das compilieren eines größeren programms stunden dauern konnte. deshalb sah man das einhalten der deklarationsreihenfolge als das kleinere übel an. seit dem haben sich die c-programmierer daran gewöhnt und kämen garnicht mehr auf die idee, daran noch etwas ändern zu wollen.

    na, dann sollte ich wohl mal eine mail an die standard-fritzen schreiben, damit die das ändern.

    Konfusius schrieb:

    PS: habe nicht gemerkt, daß eine antwort schon gepostet wurde.

    schon klar, sind ja nur 4 stunden vergangen.
    🙂


Anmelden zum Antworten