Was spricht für/gegen 'C' als Programmier-Sprache ...

  • Jetzt willst Du mir sagen, daß die menschliche Birne bei 32 ARM-Registern oder einer ebensolchen Anzahl ATMega-Registern noch den Überblick behält?

    Ja locker. 6 gehen eh für die X,Y,Z-Pointer drauf. r0, r1 ist mul-Rückgabe, noch ein paar Counter und Temps.


    Wenn Du z.B. eine Software-PWM für 8 Kanäle programmierst, nimmst Du 8 der Register für die PWM-Werte, und einen PWM-Counter. Damit musst Du in der zeitkritischen Routine keine Werte im SRAM rumschubsen und bekommst eine PWM-Geschwindigkeit, die erreicht kein C-Compiler.


    Das Problem bei C aufm AVR ist erstmal eher, dass es versucht alles auf 16bit zu trimmen, was bei einem 8-Bitter natürlich reichlich sinnlos ist. Das kann Freepascal inzwischen sogar besser.

  • Was mir grad' noch eingefallen ist: es wäre sicherlich auch interessant von jemandem, der sich für, in diesem Fall C, interessiert die Gründe zu erfahren, aus denen er sich dann aber doch nicht drantraut ...

    Das könnte Andreas in seinem Icon-Thread auch interessieren ...

    cu,

    -ds-

  • Ich find das kompilieren von C Code mit Abstand das schlimmste was einem passieren kann. Wer schon mal ein Projekt bei github gefunden und dann versucht diesen Kram zu kompilieren (und nicht viel Ahnung davon hat) weiss wovon ich rede . Mal gibt es make files, mal keine (warum? und was mach ich wenn es keins gibt) dann macht das Programm irgendwas und bricht dann mit einer kryptischen Meldung ab (worauf man dann ewig sucht und hofft irgendwo das passende Paket zu erraten was ihm fehlt). Kann ein Compiler im Jahr 2017 nicht sagen was ihm Fehlt. Please install Paket-dev first. Warum zeigen die nie Zeile an in der der Fehler liegt sondern benutzen Worte wie "near" oder schätzen die grob (er muss doch genau die Zeile wissen an der er gestorben ist)


    Aber das regt mich auch bei anderen Sprachen auf die Zwischen "" ' u. ´` unterscheiden. There is an error in your SQL Syntax - Dann sag mir wo, kann doch nicht so schwer sein.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Warum zeigen die nie Zeile an in der der Fehler liegt

    so in etwas "Syntax Error in 7112"?


    wie fingen Märchen immer an "es war einmal" *scnr* ;)

    lasst die PIs 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)

  • Was ich an C mag: Ich kann es heutzutage auf jedem MicroController verwenden. Also auch so Spielzeug Dinger mit 1KB Flash und 64 Byte RAM. Die zugehörige Entwicklungsumgebung (IDE) macht das mit dem Compilieren und ich brauche mich in der Regel mit den dahinterliegenden Einstellungen nicht quälen.


    Was ich an C nicht mag: Bei Linux komme ich da einfach nicht "rein" - es ist für mich nicht selbsterklärend. Kryptische Fehlermeldungen, Abhängigkeiten die warum auch immer nicht funktionieren... Compilieren funktioniert meist von anderen Quellen nicht... Da lade ich mir z.B. lieber eine kleine IDE für Python (in meinem Fall NINJA) schreibe etwas Code und starte...

    ...wenn Software nicht so hard-ware ;-) ...

    Freue mich über jeden like :thumbup:

  • Hallo,


    also wenn man auf dem (Linux-) PC keine low-level Programmierung machen möchte, dann kommt an an C sehr gut vorbei. Low-Level = alles, was extrem hardware-nah ist oder Kernelmodule schreiben.


    Wenn man von höheren Programmiersprachen (wie z.B. Python) kommt, erscheint C sehr aufwendig (=viel Code für das gleiche Ergebnis), so dass man sich relativ schnell dir Frage stellt: warum? Und dann ist man relativ schnell wieder bei seiner "alten", high-level Programmiersprache - weil's einfacher und schneller ist. Hat dafür aber kein C programmiert / gelernt.


    Den C-Dialekt für Arduino & Co finde ich übrigens ungleich einfacher zu programmieren als C auf dem PC. Was wahrscheinlich daran liegt, dass man ja in der Regel "nur" ein paar Ein- / Ausgänge schalten / abfragen will.


    Go findet ich übrigens auch viel einfacher als C - da sind halt die "dark sites" von C weitesgehend eliminiert.


    Gruß, noisefloor

  • Ich habe viele Jahre unter HP-UX in C programmieren müssen (DB-Anwendung).

    Memory-Leaks waren an der Tagesordnung, ok, wird auch meinen damals recht "übersichtlichen" Kenntnissen geschuldet sein.


    Die paar Zeilen C-Code, die ich in den letzten Jahren verbrechen durfte (Den C/C++ - Dialekt des ARM (Arduino/ESP) mal nicht gerechnet), haben mich irgendwie nicht mehr überzeugt.


    Was ich gut finde (Dubletten schon zu gesagtem möglich und beabsichtigt):

    * #define : Super Sache, ich wünschte, das gäbe es bei Java und Python auch...

    * Zeigerarithmetik: Sehr geschmeidig, wenn man aufpasst... sauschnell

    * Code ist, wenn er denn läuft, sehr schnell


    Was ich nicht so gut finde:

    * Gegenüber Hochsprachen sehr aufwendiges Coding, um etwas mit der gleichen Funktionalität hinzustellen.

    * Übersetzungsprozess kritisch... schon eine Bibliothek in der falschen Version kann den Buildprozess scheitern lassen oder (was fast noch schlimmer ist), das Compilat unbrauchbar machen, ohne dass man es gleich merkt (z.B. durch geändertes Interface).

    * Lange Einarbeitungszeit in die Sprache: Die Sprache (vom Syntax her) selbst ist zwar an sich übersichtlich, aber bis man da soweit firm ist, dass man unfallfrei einen etwas komplexeren Code-Brocken schreiben kann, dauert es doch recht lange.


    Ich hatte eher viel mehr mit C++ zu tun, ist zwar noch etwas komplexer, aber da hab ich eher reingefunden.


    Und noch was zu den Headern:

    Das Konzept der Header als Interface finde ich sehr gelungen: Gerade bei größeren Projekten mit vielen Entwicklern hat sich das (bei uns) bewährt.

  • Na also ... sieht doch schon mal ganz gut aus bis jetzt ... :thumbup:

    Das ist nicht fair ... einen Python-bashing Thread zu initiieren und dann diesen Thread nicht C-bashing zu nennen :no_sad:


    Anbei mal mein Senf:


    Vorteile


    1) Fuer hardware- und systemnahe Programmierung gut geeignet und besser und leichter zu schreiben als Assembler Code

    2) Sehr verbreitet (Lingua franca auf allen Unix Derivaten)

    3) Compiler generieren effizienten Code


    Nachteile


    C ist einfach fuer Applikationsanwendungsprogrammierung ungeeignet

    1) Pointerarithmetik wie Dualitaet von Arrays und Pointern fuehrt haeufigig zu unbeabsichtigten Fehlern bzw Speicherueberlaeufen

    2) Keine strenge Typisierung. Mit casts kann man alles umschiessen mit entsprechenden negativen Seiteneffekten

    3) Fehlende RTTI um typsicher zu casten

    4) Keine Exceptions

    5) Kein Typ boolean. Fuehrt immer wieder zu Fehlern (z.B. ist if (a = b) syntaktisch korrekt aber erzielt nicht den eigentlich beabsichtigten semantischen Zweck von if ( a == b )

    6) #includes sind ein Erbe vom Assember und werden missbraucht um fehlende syntaktische und semantische Funktionen zuzufuegen. Ausserdem erschweren sie die Lesbarkeit/Debugbarkeit extrem.

    7) Kein Typ String. Die str... Operationen auf ein zeroterminated Bytearray sind haeufige Quelle von Fehleren

    8) Explizite Memory Allocation/Deallokation erzeugen haeufig Fehler. Heutige Hochsprachen haben deswegen einen Garbagecollector

    9) Kein OO Support

    10) Kein Modulekonzept

    11) Es ist relativ leicht unlesbaren bzw unwartbaren Code zu schreiben. Diese Eigenschaft hat C leider vom Assembler geerbt.

    12) Codewartung ist i.d.R. herausfordernd. Diese Eigenschaft ist der Abstammung von Assembler geschuldet.


    Zusammenfassung


    C ist ein besserer Assembler und fuer alle Gebiete wo man sonst nur Assembler einsetzt sehr geeignet. Das trotz seines Alters. Aber fuer Anwendungsentwicklung fehlen viele Feature die neuere

    Hochsprachen mittlerweile besitzen. Fuer Programmiereinsteiger ist sie nicht geeignet da zu viele Moeglichkeiten bestehen Programmierfehler zu machen und wesentliche moderne Programmierkonzepte nicht unterstützt werden.


    Erfahrungshorizont


    Diverse Jahre C Programmierung im HW- und Applikationsbereich und danach mehrere Jahre C++ Applikationsentwicklung. Jetzt froh nicht mehr mit C/C++ zu tun zu haben :shy: Es folgten Java, Groovy, Python und aktuell ist Go meine Projektsprache. Bei letzterem merkt man sehr dass Ken Thompson (Erfinder von B, dem Vorgaenger von C und Entwickler von Unix zusammen mit Dennis Ritchie) und Rob Pike (Auch aus den Bell Labs und bei der Unix Entwicklung aktiv) aus den Fehlern der Vergangenheit bei C gelernt haben.

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

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<

  • Für C spricht für mich:

    - Für nahezu jede Plattform gibt es einen C-Compiler & -Linker. In den allermeisten Fällen ist beides sogar kostenfrei zu nutzen, siehe als Beispiel gcc.

    - Nahezu jede IDE unterstützt C.

    - In C kann ich sehr granular "einstellen", was ich haben will.

    - Ich kann sehr hardwarenah programmieren und damit die Resourcen meines Systems gut ausnutzen.


    Gegen C spricht für mich:

    - Die Granularität der Sprache führt zu einem erhöhten Programmieraufwand, der sich unter anderem in mehr Codezeilen und benötigtem Fachwissen ausdrücken lässt, um zum Ziel zu kommen.

    - C ist nicht per se als Einstiegssprache für Programmiereinsteiger die richtige Wahl. Aber durch die modernen Lernmethoden wie Foren, video-basierte Schulungen und Tutorials wird das recht gut ausgeglichen.

    Mein Github-Repository ist hier zu finden.

  • In den allermeisten Fällen ist beides sogar kostenfrei zu nutzen

    Gibt irgendeine Sprache wo das nicht so ist? Und wenn ja, warum gibt es Leute die dafür zahlen?

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Gibt irgendeine Sprache wo das nicht so ist? Und wenn ja, warum gibt es Leute die dafür zahlen?

    BASCOM für Atmel Arduino will ausserhalb der Demo auf 4k begrenzt 90,-€ haben, auch ein Grund warum ich Basom verlies

    lasst die PIs 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)

  • Hallo zusammen,


    eigentlich ist die Programmiersprache C ein "verzuckerter Assembler" - so hat es mal eine Computer-Koryphäe in den 80ern des letzten Jahrhunderts zum Ausdruck gebracht. Da ist was dran, denn diese Hardwarenähe findet man sonst nur selten. Bei den meisten anderen Programmiersprachen ist einige Ebenen vor der Hardware Schluss.


    Viele Programmiersprachen inkl. der ganz alten Programmiersprachen aus den 50ern und 60ern sind schon vor einiger Zeit dazu übergegangen, statt in in mehreren Durchläufen zum ausführbaren Programm zu gelangen, den Quellcode zuerst in C zu übersetzen - weil es dafür leistungsfähige, robuste und bewährte Compiler und Linker gibt, die wesentlich schnellere ausführbare Programme erzeugen.


    Die Programmiersprachen, die als sog. 1-Pass-Compiler direkt das ausführbare Programm - ohne Umweg über C und Assembler - erzeugt haben, sind dann wohl auch nur ein Relikt der Geschichte.

    Es muss halt jeder wissen, was er mit welchen Mitteln erreichen möchte. Eine GUI kann man in C programmieren - das geht aber mit vielen Programmiersprachen und deren Tools einfacher. Einen Treiber weder in C noch in Assembler erstellen zu wollen, wird wenig Erfolg haben, mag aber gehen.


    Ich beschäftige mich seit einiger Zeit mit dem Zusammenspiel verschiedener Programmiersprachen innerhalb einer Anwendung. Prinzipiell ist alles sehr ähnlich - aber im Detail mag's schwierig werden.


    Beste Grüße


    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.

  • eigentlich ist die Programmiersprache C ein "verzuckerter Assembler"

    Ich glaube, das bringt es bestens auf den Nenner!!!


    DIe Anzahl der Operatoren und Spachkonstrukte ich recht "übersichtlich". Ohne die runtime lib's geht eh' kaum was. Modularisierung ist nur rudimentär vorhanden und die ersten Fragen kommen bereits bei der Calling convention auf. Typisierung wird kaum unterstützt, Nebenläufigkeit, Speicherverwaltung und Exceptionhandling gar nicht.


    Die lib's mal hinzugezogen sieht's nicht ganz so mau aus. Immerhin hat man in C11 das Problem der Nebenläufigkeit mal angegangen. Auch sollte man meinen, daß eine Sprache, die sich hardwartenah nennt, atomare Operationen für den hardwarenahen Programmierer zur Verfügung stellt, damit er Memory Barriers und Co nicht per __asm__ "ich kenne ja meine Chips" als unportablen Code hinschreiben muß. Naja, mit C11 kam's ja dann...

  • Ich glaube, das bringt es bestens auf den Nenner!!!

    Ein wichtiger Punkt fehlt noch :bussi2:


    C ist nicht fuer Programmiereinsteiger geeignet.

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

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<

  • C ist nicht fuer Programmiereinsteiger geeignet.

    halte ich für ein Gerücht, ein

    prinf(stdout,"hello world");


    ist kaum schwerer als ein Print"hello world" o.ä.


    komischereise klappt das in C eher auf jeden Compi als in Basic, Pascal, Icon, Fortran, Cobol, Python

    lasst die PIs 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)

  • Mensch jar ... zwischen Hello World und einem sinnvollen Programm sind doch einige Zeilen Code entfernt. Ich habe in den letzten Tagen viiiel C gelesen (Linux Kernel Header) und portiert und musste dementsprechend mich dort hineindenken. Ich weiß C in manchen Situationen sehr zu schätzen (auch wenn man das bei mir denken mag - ich kann C gut leiden und auch schreiben), aber es ist doch vieles überaus kompliziert gelöst. Und es gibt sicher weit über 10 Wege, eine Zeichenkette aka. String oder ein char auf den Bildschirm zu bringen :wallbash:

    komischereise klappt das in C eher auf jeden Compi als in Basic, Pascal, Icon, Fortran, Cobol, Python

    Sagt WER? :-/

    :wink:

  • Sagt WER?

    ich, ich lebe immer noch davon das ich meine C Programme vom Atari über den PC über den Atmel in AVR Studio zum Arduino bringen konnte, auch wenn ich mal CBM Basic Programme geschrieben hatte 1979-1990, keines davon konnte ich weiter nutzen, das war mit dem CBM zu Ende, in C nutze ich noch ältere Routinen weiter die ich brauche, klar zuerst muss man programmieren lernen.

    lasst die PIs 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)

  • Ah, so gibt es mehr Sinn ;)

    Ich hatte es so verstanden, dass ein Hello World in C leichter auf die Beine stellen lassen soll als in diversen anderen Sprachen - was ich nicht behaupten würde. Dass C eine sehr langlebige Sprache ist, und (sofern nicht zu nahe an der unterliegenden HW, Register etc.) es keine Plattform gibt, auf der C bzw. ein Kompilat dessen nicht läuft, damit hast du allerdings Recht.

    :wink:

  • Mensch jar ... zwischen Hello World und einem sinnvollen Programm sind doch einige Zeilen Code entfernt. Ich habe in den letzten Tagen viiiel C gelesen (Linux Kernel Header) und portiert und musste dementsprechend mich dort hineindenken. Ich weiß C in manchen Situationen sehr zu schätzen (auch wenn man das bei mir denken mag - ich kann C gut leiden und auch schreiben), aber es ist doch vieles überaus kompliziert gelöst. Und es gibt sicher weit über 10 Wege, eine Zeichenkette aka. String oder ein char auf den Bildschirm zu bringen :wallbash:

    Sagt WER? :-/

    Definiere: sinnvolles Programm :)


    Der eine will mal mit Sensoren rumhantieren, der nächste möchte eine CRUD-Webanwendung bauen. Da kann derselbe Aufwand drinstecken - dementsprechend stehe ich auch auf die Pauschalaussage "C ist nichts für Anfänger" überhaupt nicht. Das haben die Anfänger vor 40 Jahren nicht gesagt ;-)


    Ansonsten bin ich persönlich im Moment froh, dass mir im aktuellen Arbeitsumfeld die Low-Level-Arbeit von Bibs und dem Compiler abgenommen werden und sich bereits andere Leute Gedanken über Speicherverwaltung und Co. gemacht haben ;-).


    Eine Sache, die ich hier noch nicht gelesen habe, die ich als OOP-Entwickler aber als große Stärke ansehe, ist die Möglichkeit des "Voraus-Deklarierens" und die strikte Kapselung durch die Headerfiles (zumindest so wie ich es damals in meinen wenigen C-Stunden verstanden habe ;-)).

    Irgendwie macht das auf mich den Eindruck von "perfekter Kapselung" innerhalb einzelner Softwarekomponenten. Oder kommt es den "ernsthaften Programmierern" eher in die Quere, Andreas ? ;-)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

  • Dementsprechend stehe ich auch auf die Pauschalaussage "C ist nichts für Anfänger" überhaupt nicht. Das haben die Anfänger vor 40 Jahren nicht gesagt ;-)

    Damals gab es auch kaum Besseres :fies:. Aber heutzutage gibt es wohl kaum Einsteiger die gleich einen USB Device Treiber schreiben wollen.

    Eine Sache, die ich hier noch nicht gelesen habe, die ich als OOP-Entwickler aber als große Stärke ansehe, ist die Möglichkeit des "Voraus-Deklarierens" und die strikte Kapselung durch die Headerfiles (zumindest so wie ich es damals in meinen wenigen C-Stunden verstanden habe ;-)).

    In C ist keine Kapselung moeglich. Alles steht im global Namespace und darauf kann von jedem zugegriffen werden.

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

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<