Christian Kruse: Welche Programmiersprache ist die richtige?

Beitrag lesen

Hallo MichaelB,

Dafür sind viele Dinge in C katastrophal gelöst.

Und viele Dinge sind in Pascal so gar nicht möglich.

Das fängt schon bei ganz simplen Dingen an wie Arrays. So beginnen Arrays in C immer
mit 0 auch wenn ich das gar nicht haben will.

Die Philosophie, die da hinter steckt: das herunterrechnen des Indexes kannst du als
Programmierer auch selber tun.

In Pascal kann ich sagen Array[5..15] usw.

Pascal ist auch keine Sprache für Programmierer. Pascal ist eine Sprache für Anfänger.

falls ich das mal brauche (das konnte sogar BASIC schon) und vorallem ist auch gleich
klar wenn man sich den Code anschaut, wo dass Array beginnt und wo es endet.

Das ist bei C genau so:

char array[100];

Fängt bei 0 an, hört bei 99 auf.

Die Splittung von Headerdateien und Programmdateien bringt ebenfalls viele Probleme
mitsich (doppelter Pflegeaufwand) und tragen nicht gerade zur Übersichtlichkeit bei.

Das Gegenteil ist der Fall. Die Header-Dateien bilden recht gut die Trennung von
Deklaration und Implementation ab. In Pascal musste man diese sehr dämlichen
forward;-Konstrukte bilden. Der Pflege-Aufwand war dort übrigens in dem Fall der
gleiche.

BTW. ist die Trennung in .c- und .h-Dateien reine Konventions-Sache. Die kannst du auch
nach belieben auflösen.

C kennt nicht die häufig benötigten Strings sondern nur nullterminierte Array of Char.

Das war in Pascal übrigens nicht besser. Da war es eine Stufe abstrahierter, aber dafür
konnte ein String maximal 255 Zeichen lang werden.

Das ist fehleranfällig und schon einfache Operationen wie das Feststellen der Länge
eines Strings nötigt mich die Bytes zu zählen

Das war auch in Pascal notwendig. Einziger Unterschied: es musste maximal 255 mal
addiert werden statt, wie in C, maximal unendlich mal.

(was auch nicht gerade positiv für die Perforamce ist).

Zähle halt mit.

Mengen und Bereiche fehlen gänzlich in C.
Ich kann nicht einfach mal sagen
if ch in ['ä','ö','ü','ß','Ä','Ö','Ü'] usw.
sondern muss immer
if (ch=='ä' || ch=='ö' || ch=='ü' || ch=='ß' || ch=='Ä' || ch=='Ö' || ch=='Ü')
Das soll übersichtlicher sein?

Dafür gibt es switch().

switch(ch) {
  case 'ä':
  case 'ö':
  case 'ü':
  case 'ß':
  case 'Ä':
  case 'Ö':
  case 'Ü':
    tu_was();
    break;
}

Das fehlen von Bereichen macht Programme fehleranfällig.

Das ist nun wirklich aus der Luft gegriffen.

In Pascal kann ich sagen:
Type jahreszahlen = 1970..2500
Und die Realisierung von Aufzählungstypen in C ist ein Witz:
enum wochentag = {Mo, Di, Mi, Do, Fr, Sa, So};
...
wochentag=Di; //funktioniert
wochentag=2;  // funktioniert auch!!!

Nein, funktioniert nicht. Es ist nicht definiert, welche Zahl der Compiler für Di
auswählt. Wenn du sichergehen willst, dass Di mit zwei indiziert wird, musst du die
Definition wie folgt ändern:

enum wochentage = {
  Mo = 1,
  Di = 2,
  Mi = 3,
  Do = 4,
  Fr = 5,
  Sa = 6,
  So = 7
};

Da kann ich gleich mit int-Konstanten arbeiten. Da weiß ich wenigstens, woran ich bin.

Wenn du C kannst, weisst du auch so, woran du bist. Wenn du es nicht oder nur unzureichend
kannst, ist es unwichtig für dich.

Nene, Pascal war in vielerlei Hinsicht nix besser als C, was die Konstruktionen betraf.
Wenn man da ein bisschen über "das Normale"[tm] herausging und es wirklich effektiv nutzen
wollte, stiess man dort an die gleichen Probleme wie in C. Auch in Pascal musste ich, wenn
ich dynamisch grosse Arrays haben wollte, mit Pointern hantieren.

Grüße,
 CK

--
Microsoft: Where do you want to go today?
Linux: Where do you want to go tomorrow?
FreeBSD: Are you guys coming, or what?
0 111

Welche Programmiersprache ist die richtige?

Jürgen Ulmschneider
  • programmiertechnik
  1. 0
    Die dicke Tina
    1. 0
      wahsaga
      1. 0
        Andavos
    2. 0
      Onkel
      1. 0
        Fabian Transchel
    3. 0
      Atomfried
      1. 0
        Johannes Zeller
  2. 0
    Andavos
  3. 0
    Markus Trusk
    1. 0
      Andavos
      1. 0
        Markus Trusk
    2. 0
      Martin Jung
      1. 0
        MichaelB
        1. 0
          Martin Jung
          1. 0
            MichaelB
            1. 0
              Martin Jung
              1. 0
                MichaelB
                1. 0
                  Martin Jung
                  1. 0
                    MichaelB
    3. 0
      Andreas-Lindig
      1. 0
        MichaelB
  4. 0

    Nimm Java

    MichaelB
    1. 0
      Jürgen ulmschneider
      1. 0
        Fabian Transchel
        1. 0
          Christian Seiler
          1. 0
            Jürgen Ulmschneider
            1. 0
              Christian Seiler
              1. 0
                MichaelB
  5. 0
    Gerrit
    1. 0
      MichaelB
      1. 0
        Christian Seiler
        1. 0
          MichaelB
          1. 0
            Christian Seiler
            1. 0
              Jürgen ulmschneider
              1. 0
                MichaelB
              2. 0
                Ingo Turski
  6. 0
    Danny
    1. 0
      FrankieB
      1. 0
        MichaelB
        1. 0
          FrankieB
  7. 0
    Bio
    1. 0
      MichaelB
      1. 0
        Bio
        1. 0
          MichaelB
    2. 0
      Gerrit
      1. 0
        Gerrit
  8. 0
    Noodles
    1. 0
      MichaelB
      1. 0
        Noodles
        1. 0
          MichaelB
          1. 0
            Christian Kruse
            1. 0
              MichaelB
          2. 0
            GONZO
            1. 0
              MichaelB
    2. 0
      Jürgen Ulmschneider
      1. 0
        MichaelB
  9. 0
    Julian von Mendel
    1. 0
      MichaelB
  10. 0
    Jürgen Ulmschneider
    1. 0
      MichaelB
    2. 0
      Vinzenz
      1. 0
        MichaelB
        1. 0
          Klaus Mock
          1. 0
            MichaelB
          2. 0
            Frank Schönmann
            1. 0
              MichaelB
              1. 0
                Frank Schönmann
                1. 0
                  MichaelB
                  1. 0
                    Christian Seiler
                    1. 0
                      MichaelB
                      1. 0
                        Christian Kruse
                        1. 0
                          MichaelB
                          1. 0
                            Christian Kruse
                            1. 0
                              MichaelB
                              1. 0

                                Fortsetzung

                                MichaelB
                                1. 0
                                  Klaus Mock
                                  1. 0
                                    MichaelB
                  2. 0
                    Christian Kruse
                    1. 0
                      MichaelB
    3. 0
      Kopfwunde
    4. 0
      Eternius
      1. 0
        GONZO
        1. 0
          MichaelB
  11. 0
    Jürgen Ulmschneider
    1. 0
      MichaelB
      1. 0
        Fabian Transchel
        1. 0
          MichaelB
          1. 0
            Fabian Transchel
            1. 0
              MichaelB
      2. 0
        Christian Seiler
        • menschelei
        1. 0
          Fabian Transchel
  12. 0
    nobody
    1. 0
      Fabian Transchel
      1. 0
        MichaelB
        1. 0
          Fabian Transchel
          1. 0
            MichaelB
            1. 0
              Fabian Transchel
              1. 0

                Energien

                MichaelB
                • sonstiges
                1. 0
                  Christian Seiler
                  1. 0
                    Christian Seiler
                    1. 0
                      MichaelB
                  2. 0
                    Fabian Transchel
                    1. 0
                      Christian Seiler
                  3. 0
                    MichaelB
                  4. 0
                    Christian Seiler
                    1. 0
                      Klaus Mock
                      1. 0
                        Fabian Transchel
                    2. 0
                      Fabian Transchel
          2. 0
            Christian Seiler
            1. 0
              Fabian Transchel