Diese verflixten unnoetigen Semikola in C machen mich verrueckt

  • Nach langer Zeit programmiere ich mal wieder in C bzw C++ da die ESPs damit am einfachsten zu programmieren sind.


    Jetzt gehe ich ins Bett - aber wieviel Zeit ich heute verbracht habe kryptische Compilerfehlermeldungen zu verstehen und letzendlich den Code entsprechend zu fixen - nur weil irgendwo wieder ein Semikolon fehlte :wallbash:


    C ist die Lingua Franca von Linux und die Linux Core Freaks kennen sicherlich die ganzen Semikolonfallen in C - aber ich moechte nicht wissen wie viel Zeit diese bei ihrem EInstieg in Linux Development damit vergeudet haben so bloede Semikolonfehler zu finden und zu fixen.


    Wie vermisse ich doch go wo diese unnoetigen Semikola nicht notwendig sind ;(

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • framp

    Changed the title of the thread from “Diese verflixten unnoetigen Semikolons in C machen mich verrueckt” to “Diese verflixten unnoetigen Semikola in C machen mich verrueckt”.
  • Der Betreff ist falsch — die sind eben nicht unnötig sondern schliessen Anweisungen ab. Man kann die nicht weg lassen weil dann an einigen Stellen in der Syntax Mehrdeutigkeiten entstehen können.


    Als Einsteiger in C habe ich da so gut wie nie Fehler gemacht. Man macht halt einfach immer ein Semikolon am Ende jeder Anweisung und gut ist. Was ich an sich gut fand, weil unser Lehrer im Informatikunterricht unnötige Semikolons in Pascal immer als Fehler angestrichen hat. In Pascal schliessen die keine Anweisungen ab, sondern trennen Anweisungen, aber es gibt auch die leere Anweisung, so dass man die eigentlich wie bei C setzen kann. Den Fehler mit vergessenen Semikolons mache ich erst seit dem ich Python programmiere. Das Problem liegt also nicht bei den Sprachen mit den Semikolons, sondern bei den Sprachen deren Syntax uns zu sehr verwöhnt. 😉

    “I will not sell my kidney on eBay

    I will not sell my kidney on eBay

    I will not sell my kidney on eBay …” — Bart Simpson

  • Moin framp,


    erinnerst du dich?

    Leichter geht es bestimmt mit C bzw C++. Dann wuensche ich Dir viel Glueck mit Python :fies:

    Wünsch dir weiterhin auch viel Glück 8o

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Das Problem liegt also nicht bei den Sprachen mit den Semikolons, sondern bei den Sprachen deren Syntax uns zu sehr verwöhnt. 😉


    Vielleicht gibt es ja bald auch Semikolons in Python. Das nächste große Ding nach Typ-Annotationen und Walrus-Operator.

    “Don’t comment bad code - rewrite it.”

  • VSC zeigt es meist mit der Unterkringelung wenigstens an, dass hier was fehlt.

    VSC habe ich leider noch nicht fuer geschafft fuer den ESP einzurichten so dass ich Arduino nutze.

    Der Betreff ist falsch — die sind eben nicht unnötig sondern schliessen Anweisungen ab. Man kann die nicht weg lassen weil dann an einigen Stellen in der Syntax Mehrdeutigkeiten entstehen können.

    Natuerlich sind die Semikola notwendig denn die Grammatik der Sprache C verlangt sie.

    Das Problem liegt also nicht bei den Sprachen mit den Semikolons, sondern bei den Sprachen deren Syntax uns zu sehr verwöhnt. 😉

    Mein Punkt ist dass Sprachen die Semikola wg der Grammatik erfordern aber sonst unnuetz sind (C/C++, Java, ...) aus Grammatiksicht nicht mehr state of the art sind. Bei Java hat man es mit Scala und Groovy geschafft die Sprachgrammatik so zu erweitern dass keine unnuetzen Semikola mehr notwendig sind. Waere doch schoen wenn man das auch in C/C++ schaffen wuerde. Die Sprache wurde ja seit der ersten Spezifikation von K&R diverse Male erweitert.


    Es geht mir hier nicht um C im Speziellen sondern um die unnuetzen Semikola in Programmiersprachen. Nun gut, gestern Abend hatte ich 2-3 Mal Fehlermeldungen vom C/C++ Compiler, die absolut nicht auf dein fehlendes Semikolon hinwiesen und es dauerte schon etwas bis ich dann doch rausfand dass es ein simples ; war was fehlte. In Java sind die Fehlermmeldungen wenigstens besser und man erkennt sofort dass ein ; fehlt.

    Wünsch dir weiterhin auch viel Glück

    Ich glaube es ging in dem Kontext um den ESP. Hast Du es geschafft Python dort zu benutzen? Anyhow muss ich mich nur wieder daran gewoehnen ueberall und nirgends ; hinzuschreiben. Nachdem ich mich an go gewoehnt hatte wo auch keine ; notwendig sind ist dauert das leider etwas :(

    Als Einsteiger in C habe ich da so gut wie nie Fehler gemacht. Man macht halt einfach immer ein Semikolon am Ende jeder Anweisung und gut ist.

    Auch ich werde mich wieder daran gewoehnen. Aber ich denke an die vielen Einsteiger die unnuetz Zeit wg der ; vertroedeln. Nicht nur in C. Auch in Java und den anderen Sprachen mit ; Zwang. Es gibt mittlerweile genuegend Sprachen ohne diesen Zwang.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • Aus diesem Grund programmiere ich immernoch gerne in BASIC ! (ja, heute halt "X11-Basic" siehe:

    https://x11-basic.codeberg.page/

    Keine Semikolons In jeder Zeile nur genau ein Befehl.... Aber bei den Microcontrollern gibt es das wohl (noch) nicht....


    Aber nix gegen python. Es hat halt gegenüber BASIC heute das rennen gemacht/gewonnen.


    Obwohl: Dort mit den Einrückungen, das ist irgendwie fehleranfällig und ziemlicher Blödsinn...

  • Ich glaube es ging in dem Kontext um den ESP.

    Ja genau und bei dir gehts gerade doch auch um den ESP?


    Hast Du es geschafft Python dort zu benutzen?

    MicroPython, ja und das ist auch super einfach. Mit dem 'esptool' kannst du die Firmware flashen und ich habe dann Thonny benutzt um mein Programm zu schreiben und auf dem ESP zu speichern.

    https://docs.micropython.org/e…esp32/tutorial/intro.html


    Läuft wunderbar und zeigt mir fast täglich mein CO2-Gehalt im Büro an :)



    Edit: Welcher Vorteil hat den C / C++ für die ESP's ?


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • aber wieviel Zeit ich heute verbracht habe kryptische Compilerfehlermeldungen zu verstehen und letzendlich den Code entsprechend zu fixen - nur weil irgendwo wieder ein Semikolon fehlte

    viel schlimmer ist doch Tabs Sapce und alle Einrückungen zu prüfen in Python!


    Da sind Semi Cola eine Wohltat, meist liegt der Fehler vor der Meldung, leicht zu merken!


    Mich nervt an der Arduino Ide nur das ich bedingte Kompilierung mit #preprozessor nicht einklappen kann

    ;)

    In jeder Zeile nur genau ein Befehl

    geht auch in C :lol: macht es aber maximal unübersichtlich

    Code
    Serial.print(F("setup LINE 235 -> lcd5110.getContrast() ")); Serial.println(lcd5110.getContrast());

    dazu reicht eine Zeile statt 3 oder mehr, schon der Anfang verrät was gemeint ist

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Edited once, last by jar ().

  • Edit: Welcher Vorteil hat den C / C++ für die ESP's ?

    Ich bin ein gebranntes Kind bei interpretierenden dynamischen Sprachen wie Python, Groovy, Smalltalk, usw und nehme lieber Sprachen, die erst ein Compiler durchfloeht und Typechecking und diverse andere moegliche Laufzeitfehler aufdeckt.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • viel schlimmer ist doch Tabs Sapce und alle Einrückungen zu prüfen in Python!

    Da ist Guido meiner Meinung nach auch etwas ueber das Ziel hinausgeschossen :( . Aber wenn man gewoehnt ist einzuruecken empfinde ich es als nicht so schlimm.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert :shy: Bei mir tut das automatisch raspiBackup ;)

  • mich hatte schon in Pascal die begin und end zu zählen in den Wahnsinn getrieben!

    Bei verschachtelten wurde das schnell unübersichtlich


    Ich finde das mit den {} und einklappen als Wohltat! was funktioniert muss ich nicht mehr auf dem Monitor begucken, übricg bleibt was noch debugt werden muss oder wo ich weiterprogrammieren muss!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • framp okay ich verstehe :thumbup:


    viel schlimmer ist doch Tabs Sapce und alle Einrückungen zu prüfen in Python!

    Ich kenne ja leider keine andere Programmiersprache und kann deswegen keine Vergleiche ziehen. Aber auf mich machen die Einrückungen einen sauberen und übersichtlichen Eindruck. Ich sehe ziemlich schnell welche Blöcke zusammen gehören.


    Falls ich mal eine andere Sprache lerne, bin ich mal gespannt ob mir die Einrückungen fehlen werden ^^


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Aber auf mich machen die Einrückungen einen sauberen und übersichtlichen Eindruck.

    doch nur solange sie in keinem Upload in einem Webbrowser verwurschtelt werden als Text!

    Da wird aus sauberen Einrückungen mal oft kuddelmuddel.

    Hat man sich seine IDE eingerichtet auf sauber sagen wir TAB = 3 Leerzeichen wirds an anderer Stelle zu 5 oder 8 Leerzeichen ersetzt.

    Ausserdem ist nicht jeder Programmierer konstant, mischt er Tabs und Leerzeichen stimmt die ganze Einrückerei nicht mehr!

    Hat der Programmierer einen widescreen und der geneigte Leser einen small screen oder kleineres Fenster findet oft ein Zeilenwechsel statt, dann stimmt nichts mehr!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Ich habe gleich am Anfang gelernt, das man Tabs nicht verwendet, sondern immer vier Leerzeichen macht.

    Wenn man so was nicht einhält und sich auch nicht an die vorgegebene Zeichenzahl pro Zeile hält, dann hast du natürlich recht.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Ich habe gleich am Anfang gelernt,

    irgendwann wird JEDER Progger faul, ist mein Editor eingerichtet und ein TAB 4 Zeichen weiterspringt ist es mit TAB NUR ein Tastendruck der auch die Tastatur schont! (bedenke jede Tastatur hält bloß eine begrenzte Anzahl Tastendrücke)

    Ich hatte mal die gute Cherry mit 1 Mio Tastendrücke, die nervte meine Frau mit deutlichen Klicks in den Anschlägen, also musste wegen WAF eine no click her, da die auch noch Funktionstasten hatte mit Lautstärke und Ton aus blieb sie über den WAF bei mir :lol:

    Klar könnte ich zurückwechseln, aber ich werde ja auch bequemer und nutze die Funktionstasten gerne!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • sls Es gibt doch schon Semikolons in der Python-Syntax. Die sind ähnlich wie bei Pascal dazu da um Anweisungen zu trennen. Allerdings nicht generell, sondern nur wenn sie in der gleichen Zeile stehen. Da man normalerweise nicht mehrere Anweisungen in eine Zeile schreibt, sieht man die halt extrem selten. In Python ist aber auch die leere Anweisung legal, also wenn man unbedingt möchte kann man auch Ausdrücke mit Semikolon “abschliessen“. 😎


    Was dann noch fehlt sind geschweifte Klammern. Wem die fehlen, bitte einmal from __future__ import braces ausprobieren. (Wirklich machen!)


    framp Die Semikolons sind eben in C nicht *unnütz*. Dann könnte man sie ja einfach weg lassen. Du kannst die Grammatik von C aber nicht einfach ”erweitern”. Du müsstest dann die Mehrdeutigkeiten irgendwie anders auflösen und das wird dann schwieriger und unregelmässiger als die wirklich simple Regel das jede Anweisung mit einem Semikolon abgeschlossen wird.


    Sie nur da weg zu lassen wo keine Mehrdeutigkeiten entstehen, hat man ja bei JavaScript versucht. Mit dem Ergebnis das die meisten Style-Guides dringend empfehlen alle Semikolons zu setzen, weil es sonst zu Überraschungen kommt wenn man mal eines vergisst das wichtig gewesen wäre. Eben weil es einfacher ist immer eines zu setzen als auf die Sonderfälle zu achten.


    wend Was ist denn an den Einrückungen in Python fehleranfällig und wieso Blödsinn? Diese Einrückungen macht man doch in strukturierten BASIC-Dialekten wie X11-Basic auch. Eigentlich in jeder imperativen Programmiersprache jenseits von Assembler, zeilenbasierten BASIC-Dialekten, Fortran und Co. Und zwar damit das *nicht* fehleranfällig ist, weil man die Programmstruktur an der Einrückung ablesen kann. In Python ist die Einrückung halt nicht nur für den menschlichen Leser, sondern der Compiler glaubt dem Programmierer die Einrückung auch.


    jar Ich weiss nicht wirklich was mit Tabs und Einrückungen prüfen gemeint sein soll. Das ist kein praktisches Problem das man wirklich hat. Die meisten Editoren/IDEs haben schon als Voreinstellung für Python-Dateien vier Leerzeichen pro Ebene, keine Tabs. Ansonsten stellt man das halt einmal ein und gut ist.


    Eine Anweisung pro Zeile ist auch in C üblich. Und ganz sicher nicht maximal unübersichtlich. Dein Beispiel:

    C
        // ”Übersichtlich”
        Serial.print(F("setup LINE 235 -> lcd5110.getContrast() ")); Serial.println(lcd5110.getContrast());
    
        // Das gleiche in ”maximal unübersichtlich”
        Serial.print(F("setup LINE 235 -> lcd5110.getContrast() "));
        Serial.println(lcd5110.getContrast());

    Nicht wirklich oder?


    Ich habe bei Pascal nie BEGIN und END gezählt. Man sieht doch an der Einrückung welche zusammengehören‽


    Einklappen geht auch bei Programmiersprachen die keine geschweiften Klammern zur Kennzeichnung von Blöcken verwenden. Das geht auch bei Python. Da sogar ziemlich simpel, weil eine minimale Implementierung sich einfach an der Einrückung orientiert. Und auch bei Pascal sollte eine IDE BEGIN und END zum einklappen erkennen können.


    Mit der Tabtaste wirst Du jetzt langsam albern. Natürlich rückt jeder Programmierer mit der Tabtaste ein, ich auch. Das heisst ja nicht das diese Taste ein Tabulatorzeichen einfügen muss. Was sind denn das bitte für hanebüchene Argumente…


    (Vi(m)-Benutzer rücken eventuell noch mit anderen Tasten ein, je nach dem in welchem Modus sie sich befinden, oder ob sie der Tabtaste trauen und nicht lieber Strg+I verwenden. 🙂)

    “I will not sell my kidney on eBay

    I will not sell my kidney on eBay

    I will not sell my kidney on eBay …” — Bart Simpson

  • Natürlich rückt jeder Programmierer mit der Tabtaste ein

    Wusste jetzt erst nicht ob es nur peinlich oder vielleicht auch lustig ist, aber ich rücke zu 99% mit der Leertaste ein :blush::lol:

    Zum Glück hast du geschrieben 'jeder Programmierer' da kann ich als Hobby-Tippser mit das noch erlauben :daumendreh2:


    Ach und dann ist das auch gar nicht normal, dass die Leertaste so schief da hängt :-/

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • ach ihr regt euch auf wegen der erforderlichen Zeilenumbrüche am Befehlsende in diversen Basic-Dialekten oder gar wegen der Spaces, Tabs etc. bei Python. Das kann man nämlich durchaus noch toppen: Werft doch mal einen Blick auf die Programmiersprache Whitespace :)


    frohe Ostern!

  • Gallo framp,


    da habe ich einen heißen Tip für Dich: Icon.


    Kommt ohne Semikolonse aus. Wenn man eine zweite Anweisung setzen möchte, dann mit '|' oder ';'..


    Wenn ein Befehlsende offensichtlich nach Erreichen des Zeilenendes nicht erreicht ist, wird automatisch die nächste Zeile angehängt.


    Ansonsten kann man Zeilen mit '_' anhängen.


    Und nur wenn des Programmierers Code immer noch Syntax verletzt, meckert Icon.


    Gerade programmiere für einen Kunden einen Messtand mit paar Sensoren in C und C++. Das alleine nervt schon.


    Problematischer sind die Datenblätter, in denen unsinnige Berechnungsformeln stehen sowie Kommandos nicht so funktionieren, wie im Datenblatt angedeutet.


    Ich bin heilfroh, wenn die Sachen in Bibliotheken verfrachtet sind und ich mich wieder in Icon der Sache annähern kann.


    Beste Grüße und frohe Ostern


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.