[geteilt] C-Diskussion

  • Ich versteh den Sinn von C-Pointern immer noch nicht. Ob ich jetzt *ptr oder gleich var nehm ist doch bums.

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“


  • Ich versteh den Sinn von C-Pointern immer noch nicht. Ob ich jetzt *ptr oder gleich var nehm ist doch bums.

    Referenzen als Alternative, um das Umkopieren größerer Datenmengen wie Strings oder fetter structs (bzw. Klassen) für Methodenaufrufe zu vermeiden, gibt es nur in C++. Allerdings ist damit auch keine Pointer-Arithmetik möglich.

  • Letztendlich ist auch fast jede Array-Implementation intern auf Pointern aufgebaut. Wenn man zB aus .net ein Array (nicht einen Wert daraus) in eine C-Funktion übergibt, kommt dort ein Pointer an, mit dem sich im verwalteten Speicher schreiben lässt. Für die alten C-Strings gabs auch erst mal keine Alternative, da war while (*ptr) { ptr++; } ne elegante Möglichkeit, alle Buchstaben abzuarbeiten

    Spoiler anzeigen


    Haupt-Laptop:
    Dell Vostro 3560 - i7-3632QM, 6GB
    Rechenknechte:
    Lenovo - i5, 4GB
    Medion - Pentium Dual Core, 3GB
    IBM T60 - Core Duo, 2GB
    Lenovo T400 - Core2Duo, 2GB
    Server:
    Sony - Pentium M, 512MB
    Unbenutzt:
    Noname - Celeron D, 1GB

  • C# finde ich auch deutlich angenehmer als C. Mit Java habe ich mich nie wirklich beschäftigt und kann daher dazu nichts sagen.

  • Man muss hier unterscheiden zwischen Sprache (Syntax) und ihrem Denkmodell (Semantik). Als reine Syntax-Sprache ist C eine der simpelsten Sprachen die es gibt. Nur Java ist vermutlich ähnlich simpel, während Sprachen wie C#, C++ oder JavaScript viel kompliziertere Ausdrücke erlauben.

    Nur das Denkmodell von C ist halt wirklich sehr Lowlevel, und man muss mal etwas grundsätzliche Computerarchitektur verstanden haben, damit man auch versteht warum sich einfach aussehender C-Code dann doch radikal anders verhält als praktisch identischer C#/Java-Code.

    Glaube die meisten Leute halten C aus den gleichen Gründen für unnötig kompliziert wie sie JavaScript für undurchdacht halten: Sie glauben, sie würden die Sprache können, weil sie sieht ja so aus wie das was man kennt. In Wirklichkeit ist das Denkmodell aber ein anderes.

    Einmal editiert, zuletzt von gandro (15. Dezember 2012 um 12:30)


  • Nur das Denkmodell von C ist halt wirklich sehr Lowlevel, und man muss mal etwas grundsätzliche Computerarchitektur verstanden haben, damit man auch versteht warum sich einfach aussehender C-Code dann doch radikal anders verhält als praktisch identischer C#/Java-Code.


    Ich finde C nicht schlecht , aber manche dinger sind da so kompliziert, da bleib ich doch lieber bei moderneren Sprachen.
    Das Lowlevel zeigt sich schon alleine daran, dass man in C ohne Probleme selbst Assembler schreiben kann, die wohl niedrigste Sprache.
    C ist halt so eine Mischung aus High- und Lowlevel. Ich habe x mal versucht C durchzukauen, aber bin dann doch immerwieder gescheitert

    Es ist besser nicht zu moderieren als falsch zu moderieren

    Einmal editiert, zuletzt von Der Doktor (15. Dezember 2012 um 12:38)


  • C# und Java haben doch jede Menge zeug das C nicht hat... allein bis man den ganzen OOP-foo wirklich verstanden hat braucht man doch Jahre.

    Die Semantik von C ist wesentlich einfacher, ja.

    Aber Java ist trotzdem von Semantik und Syntax eine der (sehr) leichten OOP-Sprachen, die sehr leicht zu erlernen sind.

    Liegt vermutlich daran, das Java (im Vergleich zu anderen Sprachen) relativ wenig Schlüsselwörter und Anwendungsfälle für "spezielle Lösungen" hat und somit der Code - in dieser These [1] - auch leichter verständlich ist.


    1: Mir ist klar das Java damit auch natürlich teilweise code intensive Lösungen benötigt, die in anderen Sprachen leichter zu realisieren sind.


  • C# und Java haben doch jede Menge zeug das C nicht hat... allein bis man den ganzen OOP-foo wirklich verstanden hat braucht man doch Jahre.

    OOP finde ich weitaus innovativer als nicht objektorientiert. Und um das zu verstehen braucht man auch nicht lange.
    Grundsätzlich könnte man in Java C# oder etc. auch nicht objektorientiert programmieren, halt dann mit static und so.
    Als ob Vererbung, Objekte und Polymorphie so schwer sind?

    Es ist besser nicht zu moderieren als falsch zu moderieren


  • C ist halt so eine Mischung aus High- und Lowlevel.


    Exakt. C ist portables Assembler ohne den Boilerplate. Es macht daher auch nur dort Sinn, wo man sonst auf Assembler zurückgreifen müsste: Betriebsystemprogrammierung, Hardwareprogrammierung, und teilweise High-Performance-Computing.

    Es gibt gute Gründe warum jede jüngere Programmiersprache inzwischen Referenzen und Garbage Collection anbietet, weil man sich da bei den meisten Programmierproblemen auch nicht nicht drum kümmern will. Garbage Collection ist bei Hardwareprogrammierung dann aber wieder ein Hindernis.


  • Aber Java ist trotzdem von Semantik und Syntax eine der (sehr) leichten OOP-Sprachen, die sehr leicht zu erlernen sind.

    Nö. Java ist ein einziger Clusterfuck. Eiffel wäre ne einfach zu lernende OOP-Sprache. Was muss man denn alles kapieren bis man in Java "Hello World" versteht?
    - Klassen
    - Objekte
    - Methoden
    - Felder (out von System)
    - Dot-notation für Felder und Methoden (System.out.println)
    - Typen (void, String)
    - Arrays (String[] args)
    - Statische Methoden
    - public/private respektive Unterschied zwischen Interface/Implementation

    Dagegen C:
    - Typen
    - Funktionen
    - Rückgabewerte
    - Pointer
    - Includes


  • so schwer zu verstehen sind pointer und malloc ja auch nicht

    Für Personen, die sich nicht dafür interessieren wie der "Background" aussieht kann das durchaus erstmal eine Überwindung sein, da bspw. Java ja zumeist keine Systemnahen Implementierungen beibringt.

    Wenn man vom Umstieg von Java als C nicht bedenkt, das man damit auch einen Paradigmenwechsel in kauf nehmen muss, kann die "Denkbarriere" dort schon relativ hoch sein.


  • Für Personen, die sich nicht dafür interessieren wie der "Background" aussieht kann das durchaus erstmal eine Überwindung sein, da bspw. Java ja zumeist keine Systemnahen Implementierungen beibringt.

    sicherlich ist es nicht trivial, aber ohne jegliches vorwissen objektorientierung komplett zu durchsteigen passiert auch nicht einfach mal so zwischen tür und angel
    darauf bezog sich mein vergleich

    Einmal editiert, zuletzt von oreissig (15. Dezember 2012 um 13:05)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!