Eure Hauptprogrammiersprache...
- perryflynn
- Erledigt
-
-
ich denke Du verwechselst hier was, bei 64-bit werden die ersten 4 Variablen in Registern übergeben
Ich rede nicht von Aufrufparametern.
-
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)...
-
Hättest du nicht wenigstens die passende } mit reinkopieren können?
Das kommt erst 350 Zeilen später...
-
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 ...
-
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
-
und was hat das mit ISO oder nicht ISO zu tun
ISO:
Codevoid 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:
Codevoid 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
Codeint 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;
-
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.
-
ISO:
Codevoid 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:
Codevoid 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?
Kompiliert ergibt das:
Code
Alles anzeigen.LC0: .string "Dies ist ein Test" foo1: cmp edi, 1 je .L4 ret .L4: mov edi, OFFSET FLAT:.LC0 jmp puts .LC1: .string "Dies ist ein Tes" foo2: cmp edi, 1 je .L7 ret .L7: mov edi, OFFSET FLAT:.LC1 jmp puts
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;
C
Alles anzeigen#include <stdio.h> #include <string.h> void foo(int); int main( int argc, char* argv[ ] ) { char sz[ 20 ]; strcpy( sz, "" ); if ( argc > 3 ) { char* cpsz = "Hello World"; strcpy( sz, cpsz ); } printf( "%s\n", sz ); foo(argc); return 0; } void foo(int param) { if(param == 1) { char *bar = "Dies ist ein Test\n"; printf("%s", bar); } else { return; } }
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
-
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; -
Loxley Alte Hasen haben irgendwo im Hinterkopf, daß da schon gewaltiges beim Stackframe passiert,
Grins, ich bin > 40 und denke gelegentlich, dass ich zum alten Eisen gehöre.
-
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ß.
-
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.
-
H6G: bist Du sicher, dass Du an der
Ja schon, aber einen Raspi nutzt man ja auch vor allem aufgrund des Ökosystems drumherum.
Na, dann wird's Zeit für ein netcup Raspi-Hosting.
-
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.