[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Einsteigen mit C oder Pascal?



Hallo Wulf, hallo alle!

On Wed, 21 Oct 1998, Dr.-Ing. Wulf Alex wrote:

> Es geht noch etwas kuerzer:
[...]
> Man kann auf die Variable c und die Zeile mit der Addition verzichten,
> da die Funktion printf() als Argument auch einen Ausdruck akzeptiert.

Klar, und dasselbe gilt fuer die Pascal- und die C++-Version. Mir kam es
auf ein "einfaches" Beispiel an, also auf eine klare Gliederung in
einzelne Schritte. Ausserdem sollte eine explizite Wertzuweisung
vorkommen, um auch hier den Unterschied zwischen Pascal und C zeigen zu
koennen.

> Die include-Zeile kann man auch weglassen, da die verwendeten Funktionen
> vom Default-Typ integer sind, aber das sehe ich als schlechten Stil an.

Ja, das ist eben die Sache mit den unter Umstaenden entbehrlichen
Prototypen. Uebrigens faellt mir auf, dass mir der Begriff "schlechter
Programmierstil" eigentlich erst begegnet, seit ich mich mit C befasse
(meine etwa zehnte Programmiersprache). Das hat bestimmt mit einem inneren
Widerspruch zu tun: Die Sprache erzieht einen einerseits zu moeglichst
knapper Formulierung, andererseits gibt es Dinge (wie diese #include's),
die man zwar weglassen *kann*, aber eben nicht weglassen *sollte*.

> Dasselbe gilt von der return-Zeile.

Was dann passieren kann, hat Anton Lindenmair ja bereits sehr gut
ausgefuehrt. Ein Programm mit undefiniertem Exitcode zu beenden, ist schon
so etwas wie eine Todsuende, aber in C kriegt man das ganz einfach hin,
indem man dieses komische return vergisst, das man in anderen Sprachen
ueberhaupt nicht braucht. Also, versteht mich recht: Ich will C nicht
irgendwie niedermachen, aber wenn es um paedagogische Fragen geht, muss
man meiner Meinung nach auf solche Klippen mit aller Deutlichkeit
hinweisen. Der C-Compiler von Borland gibt einem durch seine zahlreichen
Warnungen uebrigens gute Hilfestellungen, aber auch das muss man als
Anfaenger erst einmal verkraften, dass man ein voellig richtiges Programm
geschrieben hat, das sogar korrekt laeuft, und trotzdem hat der Compiler
noch jede Menge daran herumzumeckern.

> Nun noch das Ganze als Shellskript:

Eine sehr interessante Variante, vielen Dank! Mit Ruecksicht auf unsere
moeglichen Neueinsteiger moechte ich dieses Thema allerdings nicht
vertiefen.

Stattdessen vielleicht noch ein paar andere Unterschiede zwischen Pascal
und C:

In einer Mail war von einer missglueckten switch-Anweisung die Rede. Die
gefaehrlichste Klippe ist hier wieder einmal, dass man etwas sehr
Wichtiges vergessen kann, ohne dass der Compiler meckert. Nehmen wir
einmal an, wir haetten eine integer-Variable i und wollten in
Abhaengigkeit von ihrem Wert verschiedene Dinge tun.

Programmfragment in Pascal:

   case i of
   0:
      { mach irgendwas }
   1..5, 10, 20:
      { mach etwas anderes }
   else
      { noch etwas anderes }
   end;

Programmfragment in C:

   switch (i)
   {
      case 0:
         /* mach irgendwas */
         break;
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 10:
      case 20:
         /* mach etwas anderes */
         break;
      default:
         /* noch etwas anderes */
         break; /* das koennte fehlen, waere aber "schlechter Stil" */
   }

Vergisst man das break in C, so latscht man in den naechsten Zweig hinein,
was man in den seltensten Faellen wirklich will. Pascal springt dagenen
automatisch am Ende jedes Zweiges aus der case-Anweisung heraus (hier muss
man sich mit einem goto helfen, wenn man tatsaechlich einmal mehrere
Zweige durchlaufen will). Bemerkenswert ist auch die Moeglichkeit in
Pascal, mehrere Faelle sowie ganze Bereiche zusammenzufassen; fragt mich
nicht, warum man das in C nicht kann.

Weil es gerade so Spass macht, noch kurz zu einer anderen Konstruktion,
naemlich dem if-then-else, an dem man die Unterschiede zwischen den
Sprachen auch recht gut demonstrieren kann. Seien a, b, u, v und w
irgendwelche geeigneten Variablen. Wir vergleichen die Werte von a und b.
Sind sie gleich, so soll u auf den Wert von v, andernfalls von w gesetzt
werden.

Anweisung in Pascal:

   if a=b then u:=v else u:=w;

Anweisung in C:

   if (a==b) u=v; else u=w;

(Ihr bemerkt, ich schenke mir hier einige Leerzeichen.)

Was ist fuer Euch der "natuerlichere" Sprachstil?

Jetzt muss ich mich aber beeilen, um Wulf zuvorzukommen. Man kann diesen
Sachverhalt in C (nicht in Pascal) naemlich noch viel kuerzer formulieren:

   u = a==b ? v : w;

Got it, liebe Neulinge?

Soviel fuer diesmal. Sagt's halt, wenn Euch diese Haeppchen auf die Nerven
gehen.

Viele Gruesse
Eberhard