Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Nov 01, 2024 01:03

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 60 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
 Betreff des Beitrags: c/c++ syntax
BeitragVerfasst: Di Mai 05, 2015 11:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
ich lerne gerade c++. Jedenfalls bin ich (ohne kontext) auf folgende Deklaration gestoßen und konnte nicht finden, was sie bedeutet:

Code:
  1. float *fp (int)


Was bedeutet (int) in dieser Deklaration (bzw bedeutet es etwas)? (und wenn möglich, warum)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Mai 05, 2015 12:06 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hi,

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:
  1.  
  2. //Deklaration
  3. float *p(int);
  4.  
  5. void main()
  6. { //Verwendung
  7.    float *ptr = p(1);
  8.    ...
  9. }
  10.  
  11. //Definition
  12. float *p(int i)
  13. { ...
  14. }
  15.  


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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Mai 05, 2015 13:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Auch hilfreich: cdecl.org dazu.

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:
Code:
  1. #include <stdio.h>
  2.  
  3. void foo(a, b)
  4.     int a;
  5.     float b;
  6. {
  7.     printf("%d %f\n", a, b);
  8. }
  9.  
  10. int main()
  11. {
  12.     foo(10, 2.f);
  13.     return 0;
  14. }

Mein g++ akzeptiert das nicht, also scheint diese Seuche aus C++ gebannt worden zu sein ;)

Wenn man die Typen garnicht angibt und seinen Code als C89 kompiliert, dann wird der Typ als int angenommen. Das waren schöne zeiten damals:
Code:
  1. #include <stdio.h>
  2.  
  3. foo(a, b)
  4. {
  5.     printf("%d %d\n", a, b);
  6.     return a+b;
  7. }
  8.  
  9. main()
  10. {
  11.     printf("%d\n", foo(10, 20));
  12.     return 0;
  13. }

Ist doch gleich viel platzsparender!!k.

viele Grüße,
Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Di Mai 05, 2015 15:47 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Danke für die schnelle Antwort.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mi Mai 06, 2015 09:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Lord Horazont hat geschrieben:
Wenn man die Typen garnicht angibt und seinen Code als C89 kompiliert, dann wird der Typ als int angenommen. Das waren schöne zeiten damals:
Code:
  1. #include <stdio.h>
  2.  
  3. foo(a, b)
  4. {
  5.     printf("%d %d\n", a, b);
  6.     return a+b;
  7. }
  8.  
  9. main()
  10. {
  11.     printf("%d\n", foo(10, 20));
  12.     return 0;
  13. }

Ist doch gleich viel platzsparender!!k.

viele Grüße,
Horazont


Interessanterweise ist das genau einer der Punkte mit denen C aufräumen sollte. So gesehen ist es eigentlich schon immer falscher Code.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mi Mai 06, 2015 16:11 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Aus diesem Grund programmiere ich viel lieber Pascal. C/C++ waren schon zu Turbo-Pascals-Zeiten recht chaotisch.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: So Mai 10, 2015 10:55 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: So Mai 10, 2015 14:07 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
Zitat:
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”.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: So Mai 10, 2015 15:34 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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.

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.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: So Mai 10, 2015 18:59 
Offline
DGL Member
Benutzeravatar

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).

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: So Mai 10, 2015 22:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Eigentlich war C seiner Zeit weit voraus, denn in modernen Skriptsprachen sind untypisierte Parameter wieder "in".

In Groovy sieht das heute so aus:
Code:
  1. def foo = {a,b -> println a+b }

:wink:

Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: So Mai 10, 2015 22:53 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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:
  1. 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:
  1. 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:
  1. int[256]& Variable

Wenig Auswirklungen auf der Praxis, aber meiner Meinung nach ziemlich Schwachsinnig ist die Altlast, so Typedefs definieren zu können:
Code:
  1. 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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Mai 11, 2015 09:23 
Offline
DGL Member
Benutzeravatar

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 :)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Mai 11, 2015 13:54 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: c/c++ syntax
BeitragVerfasst: Mo Mai 11, 2015 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
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.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 60 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.012s | 15 Queries | GZIP : On ]