Eure Hauptprogrammiersprache...

  • H6G

    ich denke Du verwechselst hier was, bei 64-bit werden die ersten 4 Variablen in Registern übergeben - R8, R9, RCX, RDX

    das ist weniger eine Frage ob ISO oder nicht, sondern eine Frage der Umgebung;

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

  • siehe Anhang,

    Boooaahh, da gruselts mir (passender XKCD). Hättest du nicht wenigstens die passende } mit reinkopieren können? ;)


    Zu Delphi: Da hab ich auch ca 5 Jahre in ner Firma gearbeitet, die mit Delphi entwickelt haben (und es wohl immernoch tun). Man hat schnell ne Oberfläche und hat mehr Zeit, sich um die Logik dahinter zu kümmern. Fand ich persönlich sehr gut. Die VLC ist schon gut. C# hat sich davon ja einiges abgekuckt. Nur das aktuelle Preismodell von Embarcadero ist für Hobby-Entwickler unerschwinglich (4.850 EUR wenn man eine Datenbankapplikation entwickeln möchte)...

  • Ich rede nicht von Aufrufparametern.

    ok, und was hat das mit ISO oder nicht ISO zu tun, auch hier werden diese bei 64-bit teilweise in Register verlagert;

    und die reservierten Worte: volatile, register, auto, static gibt es seit Urzeiten ...

    wird keines davon verwendet gilt auto als implizit angegeben; würde static als implizit angegeben gelten

    ist das Verhalten nur sehr selten ident ...

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

  • aber immer noch wird automatisch eine neue Variable erzeugt, wenn man sich im Namen vertippt hat... beim Einschalten des strict mode bekommt man immerhin eine notice ins Logfile... es geht mE in die richtige Richtung, beobachten wir mal bis PHP 10...

    error_reporting(-1) bzw. Strictmode und zusätzlich eine ErrorException mit set_error_handler(). Dann bricht das Ding während der Ausführung wie gewünscht ab. Und das sogar schon seit PHP 5.x :)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • und was hat das mit ISO oder nicht ISO zu tun

    ISO:


    Code
    void foo(int param) {
    char *bar = "Dies ist ein Test\n";
    
    if(param == 1) {
        printf("%s", bar);
    } else {
        return;
    }
    }


    Nicht ISO, aber kompilierbar und dennoch portabel:


    Code
    void foo(int param) {
    
    if(param == 1) {
        char *bar = "Dies ist ein Test\n";
        printf("%s", bar);
    } else {
        return;
    }
    }


    Erkennst du den Unterschied und die unterschiedliche Stacknutzung?

  • die Stacknutzung ist im Fall von param==1 die selbe ...

    und f. den Fall von param != 1 ergibt sich ein Hauch von Optimierung des nicht anzulegenden Stack-Frames;


    und nebenbei: das hat mit ISO oder nicht ISO gar nix zu tun;

    2teres mach ich immer schon so ...

    Variablen werden dort deklariert wo gebraucht

    der C++ compiler braucht nichtmal einen Block mit { }

    also so


    Code
    int func( const char* psz )
    {
       int len = strlen( psz );
       len--;
       char cLast = ( len < 0 ) ? '\0' : *( psz + len );
       return (int) cLast & 0x00AA;
    }

    f. den C compiler ist es hinreichend am Beginn von Zeile 5 vor char cLast einen Blockbeginn mit { und am Ende von Zeile 6 nach dem ; ein Blockende mit } zu setzen;

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

  • und f. den Fall von param != 1 ergibt sich ein Hauch von Optimierung des nicht anzulegenden Stack-Frames;

    Summiert sich bei mehreren Variablen.



    und nebenbei: das hat mit ISO oder nicht ISO gar nix zu tun;

    Doch, ergibt sich nämlich anhand des Schalters pedantic für GCC. Einige Projekte setzen den Pedantic Schalter und Werror dazu; das macht keinen Spaß, forciert das "Variablenkuscheln" welches die Definition von ISO-C ist.

  • Zu Delphi: […] Die VLC ist schon gut. C# hat sich davon ja einiges abgekuckt. Nur das aktuelle Preismodell von Embarcadero ist für Hobby-Entwickler unerschwinglich (4.850 EUR wenn man eine Datenbankapplikation entwickeln möchte)...

    Das ist kein Wunder, Anders Hejlsberg ist an beiden maßgeblich beteiligt gewesen. Ich glaube der schlechte Ruf von Delphi liegt auch daran, dass Embarcadero es sich nicht leisten kann, die IDE zu verschenken.

  • Kompiliert ergibt das:

    Macht also überhaupt keinen Unterschied. Es sei denn, Du kompilierts mit -O0, aber in beiden Fällen brauchst Du dir über Stack gar keine Gedanken zu machen.


    Und warum wird Assembler hier nicht gesyntaxhighilited?

  • Doch, ergibt sich nämlich anhand des Schalters pedantic für GCC. Einige Projekte setzen den Pedantic Schalter und Werror dazu; das macht keinen Spaß, forciert das "Variablenkuscheln" welches die Definition von ISO-C ist.

    Nö, wenn Du ISO konform sein willst heißt der Schalter -std=xxxx

    xxxx steht dabei f. c89, c99, c9x, iso9899:1990, iso9899:1999 oder iso9899:199x wenn es C sein soll

    bzw. f. c++98 oder c++0x wenn es C++ sein soll

    zu Deinen 2 Funktionen, hier hast bereits durch das fehlende reservierte Wort static od. const den Fehler gemacht

    sodaß sich die Frage mit dem Stack Frame gar nicht stellt;


    wennst es so compilierst

    gcc -std=c99 -pedantic -Werror x.c

    wird das ohne Probleme kompiliert

    mit

    gcc -std=c++98 -pedantic -Werror x.cpp

    hingegen bekommst Du folgenden Output


    x.cpp: In function ‘int main(int, char**)’:

    x.cpp:10: error: deprecated conversion from string constant to ‘char*’

    x.cpp: In function ‘void foo(int)’:

    x.cpp:20: error: deprecated conversion from string constant to ‘char*’


    und das hat mit Deinem Kuschbär äh Deiner Kuschelsyntax nichts zu tun :D

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

  • Loxley Alte Hasen haben irgendwo im Hinterkopf, daß da schon gewaltiges beim Stackframe passiert,

    hat aber weniger mit dem Stackframe an sich zu tun als Maschinencode zwecks 'Stack overflow'-check oder zur Initialisierung der Variablen reingepflanzt wurde;

    und noch dazu bei 16-bit oder dem frühen Stadium von 32-bit;
    das ist aber mittlerweile Vergangenheit; und wie Du erkanntest irrelevant;

    Grüße / Greetings

    Walter H.


    RS, VPS, Webhosting - was man halt so braucht;)

    • Offizieller Beitrag

    Bei mir ist es schwer zu beantworten. Die Sprache die für die Aufgabe gerade die richtige ist. Das meiste wird sich auf bash und php belaufen. Hier und da mal Kleinkram mit ruby oder perl..


    Privat für die ein oder andere Arduino Spielerei auch mal etwas C/C++ oder bei einem Raspi auch mal Python, wobei ich mit Python noch nicht wirklich warm geworden bin.

  • bei einem Raspi auch mal Python, wobei ich mit Python noch nicht wirklich warm geworden bin

    Wenn du eine Herausforderung brauchst: auf dem Raspi laufen auch C - Programme direkt auf dem Prozessor, ohne Betriebssystem.

    Direktes Arbeiten auf dem Framebuffer der Grafiklösung macht auch Spaß.

    • Offizieller Beitrag

    Wenn du eine Herausforderung brauchst: auf dem Raspi laufen auch C - Programme direkt auf dem Prozessor, ohne Betriebssystem.

    Direktes Arbeiten auf dem Framebuffer der Grafiklösung macht auch Spaß.

    Ja schon, aber einen Raspi nutzt man ja auch vor allem aufgrund des Ökosystems drumherum.

    • Offizieller Beitrag

    Na, dann wird's Zeit für ein netcup Raspi-Hosting. ;)

    Naja, dazu gehört halt einiges. Zum einen überhaupt erstmal ein Rackmount Schienensystem inkl. flexibler Kabelführung entwickeln mit dem man die PIs vernünftig ins Rack schrauben kann und auch noch zum SD-Card Tausch überall dran kommt. Ist zwar kein Hexenwerk das im CAD zu entwerfen, dann brauchst aber auch Immer noch jemanden der es fertigt (in entsprechend kleinen Stückzahlen).

    Im Großen und ganzen ist es viel Aufwand für geringen nutzen.

  • Unsere Enthusiasten bei Funkfeuer haben das mit Baumarktteilen gelöst. Kreativ, aber gerade keine Schienen. Aber, ob das eine Industrienorm erfüllt?! Wohl kaum.

    Der Grazer Provider E***.at hat übrigens am Höhepunkt des Raspberry-Hypes als Marketingaktion vor Jahren schon ein solches Housing angeboten.


    Das Rad muss also nicht komplett neu erfunden werden.