es handelt sich hier um die Deklaration einer Funktion. Du sagst dem Compiler damit, dass es irgendwo eine Funktion gibt die einen float Pointer zurückgibt und als input eine Integer erwartet. Bsp:
Code:
//Deklaration
float *p(int);
void main()
{ //Verwendung
float *ptr = p(1);
...
}
//Definition
float *p(int i)
{ ...
}
Ist in c/c++ nötig, damit Funktionen verwendet werden können, die erst später definiert werden.
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Zuletzt geändert von Vinz am Di Mai 05, 2015 15:51, insgesamt 2-mal geändert.
Ja, man kann in C sowohl die Argumentnamen als auch die Argumentypen (aber nicht beides gleichzeitig) weglassen und später spezifizieren. Wer auf ganz große schmerzen steht:
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Die waren nicht schon chaotisch, sondern noch chaotisch. Und zum groß Teil ist es längst veraltet und auch inzwischen zumindest in C++ tatsächlich verboten. Viele der genannten Dinge waren vermutlich sogar schon im ersten C89 Standard nicht mehr erlaubt und gehen noch weiter auf K&R C zurück. Wer heute noch so programmiert und nie umgestiegen ist, ist wirklich selber schuld. Im Übrigen ist zum Beispiel die Art und Weise wie in Pascal/Delphi Variablen noch am Anfang der Funktion aufgelistet werden müssen, keines Wegs besser.
EDIT: Sinn ausgebessert, danke Sharkman
Zuletzt geändert von OpenglerF am So Mai 10, 2015 22:32, insgesamt 1-mal geändert.
Aus diesem Grund programmiere ich viel lieber Pascal. C/C++ waren schon zu Turbo-Pascals-Zeiten recht chaotisch.
Nur weil es in einer Sprache möglich ist, chaotisch zu programmieren, ist diese Sprache nicht schlecht. Zumindest, solange es nicht bedeutet, dass zusätzliche, häufig auftretende, vermeidbare Fehlerquellen entstehen, die schwer zu debuggen sind. zB wird C wirklich nicht besser dadurch, dass es unmöglich ist, sicherzustellen, dass du nicht aus dem array rausschreibst (unabhängig davon, dass das extra-Argument für die Länge meistens nur nervt, ist durch nichts sichergestellt, dass es korrekt ist)
Zitat:
Im Übrigen ist das Beispiel keines Wegs besser als die Art und Weise wie in Pascal/Delphi Variablen noch am Anfang der Funktion aufgelistet werden müssen.
Ich glaube, du meinst entweder “besser” oder “keines Wegs schlechter”.
Im Übrigen ist das Beispiel keines Wegs besser als die Art und Weise wie in Pascal/Delphi Variablen noch am Anfang der Funktion aufgelistet werden müssen.
Dies finde ich auch nicht unbedingt das gelbe vom Ei. Das ist ein Vorteil von C und Java, man kann eine Variable lokal in einer for-to-Schleife deklarieren.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Ihr solltet nicht den Fehler machen und subjektive oder versionspezifische Probleme / Lösungen vergleichen. Das Problem das Horazont zum Beispiel anspricht wurde von Ritchie selbst als eines der größten Probleme im Vorgänger B angeführt und ist damit einer der Gründe für die Entwicklung von C. Wenn man sich nun auch noch die Situation in Toolchains diesbezüglich vergegenwärtigt, dann kann man wohl davon ausgehen das es einfach nur ein Fehler / "Bug" war. Bei dem hohen Alter ist das aber keine große Überraschung und ich bin sicher Pascal hat, wie jede Sprache, ähnliche Probleme gehabt.
Wenn ihr Pascal-ähnliche Sprachen mit dem Stil von C vergleichen wollt, dann sollte man sich eher auf die Logik der Sprachen konzentrieren. Man könnte zum Beispiel einfach mal die Scripte für diverse Parser-Generatoren anschauen. Dort wird sehr schnell klar das Pascal sehr viel kleiner ist als C. Dafür wird man in C sehr viele Sachen finden die wiederverwendet werden und logisch aufeinander aufbauen. Eine einfache Konsequenz daraus sieht man sehr schön bei Arrays. C hat hier genau eine Regel, bei Pascal sind es aber mehrere.
So gesehen sind beide Sprachen also keineswegs chaotisch, sondern bieten nur unterschiedliche Lösungen um dem Chaos zu begegnen
Eine interessante Frage wäre jetzt also ob der Syntax von C schwerer zu verstehen ist als bei Pascal (und damit mehr Fehler verursacht), eben weil wir diesen hohen Grad an Wiederverwendung haben oder umgekehrt. Und wie würde Pascal aussehen wenn es eine ähnlich hohe Dynamik erreichen wollte (euer Beispiel mit der For-Schleife).
Also ich finde die Logik die sich an den meisten Stellen durch C zieht, sehr angenehm. Ich kenne leider Pascal zu wenig um zu beurteilen, ob dieser Aspekt dort besser oder schlechter gelöst ist, allerdings finde ich Arrays in C eigentlich nicht fehleranfällig.
Was mir in C immer schon sehr gut gefallen hat, ist die Konsequente Defintionsweise von Blocks über {}, so dass man Befehle genauso zusammenfassen kann, wie man mit () Ausdrücke zusammenfassen kann.
Es gibt allerdings auch ein paar Dinge, die mir weniger gut gefallen. Dazu gehört zum Beispiel die Idee, Pointer wären kein Typ sondern eine Variableneigenschaft.
Code:
int* A, B, C; //A ist ein Pointer. B und C aber nicht
In der Praxis wird die Schreibweise besonders bei Arrays schmerzhaft. Und bei Multidimensionalen Arrays verwirrend. Des weiteren führt es zur Notwendigkeit, Typen zu klammern.
Code:
int (&Variable)[256]
Da wäre das viel logischer. Von rechts nach links zu lesen: Referenz zu Array auf 256 Elemente vom Typ "int". Es sind nie Klammern notwendig.
Code:
int[256]& Variable
Wenig Auswirklungen auf der Praxis, aber meiner Meinung nach ziemlich Schwachsinnig ist die Altlast, so Typedefs definieren zu können:
Code:
int typedef MyTypeName;
Sehr seltsam ist auch die Möglichkeit, dass man Funktionen in einer Funktione deklarieren kann. (Aber nicht definieren!)
In C kann man einer Methode ohne Parameter beliebig viele übergeben, es sei denn, man verbietet es explizit mit "void". (Wurde in C++ behoben, aber meines Wissens bis heute nicht in C)
Da gibt es noch mehr so Sachen, daber die fallen mir gerade nicht ein.
Registriert: Mo Nov 08, 2010 18:41 Beiträge: 769
Programmiersprache: Gestern
Oh da buddelst du dir gerade eine richtig tiefe Grube mein lieber. Typedef ist eine storage-class genau wie Static, Register, Extern und Auto. Wuerdest du das verbieten kannst du keine Deklarationsketten mehr bilden. Und diese Verkettungen sind eines der grundlegensten Prinzipien im Syntax von C. Man findet es einfach ueberall
typedef ist meiner Ansicht nach aber eben keine storage-class, sondern gibt eine Typdefintion an. Schließlich wird nichts im Programm gespeichert, sondern ein anderer Name für einen Typen festgelegt. Außer dass zufällig beide male ein bestehender Typname und ein neuer Identifier benötigt werden, hat das nix miteinander zu tun und es werden völlig unterschiedliche Dinge getan.
C++11 hat dafür ja auch eine andere, verständlichere und konsequentere Schreibeweise mit "using" eingeführt.
Was mir in C immer schon sehr gut gefallen hat, ist die Konsequente Defintionsweise von Blocks über {}, so dass man Befehle genauso zusammenfassen kann, wie man mit () Ausdrücke zusammenfassen kann.
Dies geht bei Pascal auch super, da kann man records nehmen.
Mitglieder in diesem Forum: 0 Mitglieder und 26 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.