Thema: Delphi Vorteile von Delphi

Einzelnen Beitrag anzeigen

Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Vorteile von Delphi

  Alt 22. Nov 2005, 17:54
Zitat von Oxmyx:
Zitat von Binärbaum:
Ein weiterer Vorteil ist die besser gelöste Parameterübergabe an Funktionen/ Prozeduren: wenn man in C einen "Call by reference" machen will, muss man immer Zeiger übergeben und innerhalb der Funktion diese Zeiger dereferenzieren, wenn man auf den Wert zugreifen will. Bei Delphi nimmt man einfach das Schlüsselwort var vor den entsprechenden Parameter, und den Rest macht der Compiler.
Code:
void machWas(int* a)
{
    (*a)++;
}
Ich sehe keinen Unterschied zu Delphi.
Dann werden wir mal deutlicher:
Delphi-Quellcode:
procedure machWas(var a: integer);
begin
  a:= a+1;
end;
und
Code:
void machWas(int* a)
{
    (*a)++;
}
sind nicht viel unterschiedlicher, aber was, wenn man (aus Schusseligkeit, oder warum auch immer) bei C die Dereferenzierung vergisst und folgendes schreibt und somit aus Versehen den Zeiger verändert und nicht den Wert des Integers, auf den a verweist:
Code:
void machWas(int* a)
{
    a++;
}
Das ist theoretisch möglich und wird sogar kompiliert, nur das, was die Prozedur macht, ist in beiden Fällen komplett anders.

Anderes Beispiel, was "gern" falsch gemacht wird bei C/C++:
Code:
int c;
...
if (c=7) { //<--Fehler, sollte normalerweise (c==7) sein
  printf("blabla1");
  c+=3;
}
else {
  printf("else-Zweig");
  c++;
}
...
Im Code sollte eigentlich nur überprüft werden, ob der Wert von c gleich sieben ist und abhängig davon etwas ausgegeben werden. Durch (unabsichtliches) Weglassen des einen Gleichheitszeichens wird aus dem Vergleich eine Zuweisung. Damit bekommt man gleich zwei Fehler auf einmal: Die if-Abfrage ist immer erfüllt, da c=7 zu 7 ausgewertet wird, und somit als wahr interpretiert wird. Der else-Zweig wird also nie ausgeführt. Und zweitens wird auf c der Wert 7 zugewiesen, was so nicht beabsichtigt war.
Das Schlimme dabei ist, dass dadurch im späteren Programmverlauf unter Umständen ein ganz anderes Verhalten als das gewünschte auftreten kann; es kann sogar passieren, dass sich dieser Fehler weiter durch das Programm schleppt und später Fehler verursacht, die normalerweise (d.h. bei einem einfachen Vergleich) nie aufgetreten wären.

Bei Delphi (bzw. Pascal) wird für den Vergleich ein "=" und für die Zuweisung ":=" verwendet. Wenn man dort aus Versehen mal ein Zeichen vergisst, bekommt man spätestens beim Kompilieren eine Fehlermeldung und kann so den Fehler entdecken, während man bei C/C++ hingegen "fröhlich" kompilieren kann und sich bei der Ausführung des Programms mit den entstandenen Fehlern herumplagen muss.
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat