c oder doch c++



  • w81 schrieb:

    Mit welchen Büchern haben sie Gelernt ?

    Gut sind Bücher wie der C++-Primer. Thinking in C++ (Vol. 1+2) sind als E-Book erhältlich (kostenlos, selbstverständlich).



  • Hacker schrieb:

    Syntax_error schrieb:

    C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!

    Da hab ich aber DEUTLICH anderes gehört.
    C und C++ sind zwei verschiedene Programmiersprachen mit gleicher Syntax. (qtd.)

    Edit: Obwohl im Netz leider andere Sachen stehen.

    Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.



  • Ethon schrieb:

    Hacker schrieb:

    Syntax_error schrieb:

    C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!

    Da hab ich aber DEUTLICH anderes gehört.
    C und C++ sind zwei verschiedene Programmiersprachen mit gleicher Syntax. (qtd.)

    Edit: Obwohl im Netz leider andere Sachen stehen.

    Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.

    Gut, hast bestimmt Recht. Hier im Forum standen aber andere Sachen, AFAIR. Aber bestimmt von der Abwärtskompabilität gesehen...
    Edit: Verwechsele ich vielleicht mit C++/CLI.

    cooky451 schrieb:

    PS: Mit 40% biste eigentlich schon ein Guru. 😉

    Längst...



  • Ethon schrieb:

    Hacker schrieb:

    Syntax_error schrieb:

    C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!

    Da hab ich aber DEUTLICH anderes gehört.
    C und C++ sind zwei verschiedene Programmiersprachen mit gleicher Syntax. (qtd.)

    Edit: Obwohl im Netz leider andere Sachen stehen.

    Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.

    Ich sehe es auch als zwei völlig verschiedene Programmiersprachen an, und nicht als Erweiterung. Da gabs auch mal eine kleine Diskussion (ich verweise auf die Beiträge von Michael E.) dazu.



  • Wenn du einfach nur auf deinem normalen PC programmieren willst, dann gibt es deutlich bessere Sprachen um in das Thema einzusteigen.

    Falls du eine flache Lernkurve bevorzugst, dann sind C und C++ erst natürlich ideal. Wenn du pro Code-Zeile möglichst viele Sonderzeichen bringen willst, dann führt an C++ kein Weg vorbei 😃

    Für normale Anwendung macht es eigentlich keinen Sinn C zu lernen. Hast du vor hardwarenah zu programmieren, z.B. für Mikrocontroller oder ein Betriebssystem? Falls ja, dann lohnt sich C schon, aber sonst bist du mit C++ besser bedient (wenn man sich zwischen den beiden entscheiden muss).

    Bei einer normalen Software würde ich heutzutage aber definitiv nicht auf C oder C++ setzen, sondern eine richtige Hochsprache verwenden, z.B. Python. Python ist zwar auch nicht perfekt, aber auf jedem Linux inzwischen vorinstalliert. Sobald es performance-kritisch wird kann man den Code in C oder C++ schreiben und super-bequem über SWIG in Python nutzen. Wenn du dagegen mit C++ oder C anfängst, dann hast du nur Ärger, falls du mal eine Skriptsprache einbauen willst, denn dann muss mal gleich den ganzen Interpreter einbetten.

    Egal wie du dich entscheidest, tu dir selbst einen Gefallen und lerne noch mindestens eine andere Sprache. Und damit meine ich nicht C, C++, Java oder C#.



  • Ethon schrieb:

    Watt? C++ ist eine Erweiterung von C. Man hat nur mehr Sprachmittel zur Verfügung, was einen mehr oder weniger großen Einfluss auf den Code hat.

    Aber es erfüllt definitiv nicht C99. Die beiden Sprachen gingen unterschiedliche Wege.



  • Syntax_error schrieb:

    C++ ist, wie der name schon sagt, eine Erweiterung der Sprache C!

    War es vielleicht mal vor so 20 Jahren... Die Paradigmen sind so stark auseinander gegangen das zumindest die, die sauberen C++ Code schreiben, nur wenig Überscheidungen mit C finden werden (viel zu wenige um C zu empfehlen, wenn jemand C++ lernen will, zumal er sich dann die C-Paradigmen aneignet, und das Ablegen selbiger fällt manchen schwer).

    Nach deiner Erklärung müsste auch C#, C++/CLI usw. C-Ableger sein. Das ist aber nicht so.

    Prinzipiell kann man in C++ (nahezu komplett) ein C Programm schreiben, umgekehrt geht dies nicht (oder nur bedingt durch ziemlich aufwändige Nachbauten).

    @w81: MFC ist zum Lernen von C++ so ziemlich das schlechteste (ungeachtet davon ob du vielleicht später mit der MFC arbeitest). Die API orientiert sich an einen C++ Stil der schon lange als überholt gilt, und ist eigentlich nur ein [vom Stil veralteter] C++ Wrapper um eine C-API.

    Lern die Sprache, die du wirklich lernen willst, und mach darin keine Umwege (und vor allem: Falls es sich um C++ handelt - lass die Oberflächenprogrammierung erst einmal weg, du stellst dir beim Lernen nur selbst ein Bein).


  • Administrator

    @Ethon,
    Kompiliere das folgende C89 Programm in C++:

    #include <stdlib.h>
    
    int main(void)
    {
      int* arr = malloc(sizeof(int) * 10);
    
      free(arr);
    
      return 0;
    }
    

    Damit ist bereits schon bewiesen, dass C++ nicht einfach nur eine Erweiterung von C89 ist, sonst müssten alle C89 Programme auch in C++ laufen.

    Gibt übrigens noch weitere Unterschiede, wie zum Beispiel die unterschiedliche Bedeutung der folgenden Deklaration:

    int foo();
    

    In C89 ist das eine Funktion, welche beliebig viele Parameter annehmen kann. Der folgende Code ist somit gültiges C89:

    foo(10, "hello", 34.2132f);
    

    In C++ wird dies aber nicht kompilieren, da hier die Deklaration bedeutet, dass die Funktion keine Parameter annimmt.

    Bereits hier sieht man, dass keine vollständige Kompatibilität vorhanden ist. Von einer reinen Erweiterung kann man daher nicht sprechen. Wenn man dann noch die Konzepte und Ideen hinter den Sprachen ansieht, dann muss man endgültig von zwei unterschiedlichen Sprachen sprechen, welche sich einfach nur in der Syntax sehr ähnlich sind. Bzw. die eine Sprache ist eindeutig aus der anderen entstanden.

    Grüssli



  • Dravere schrieb:

    In C89 ist das eine Funktion, welche beliebig viele Parameter annehmen kann.

    Aber können diese Parameter auch benutzt werden? Und würde es dann (wenn sie nicht verwendet werden können) syntaktisch Sinn machen, Code mit sowas vollzumüllen?


  • Administrator

    Hacker schrieb:

    Aber können diese Parameter auch benutzt werden?

    Ja.

    #include <stdio.h>
    
    void foo();
    
    int main(void)
    {
      foo(10, 3.234, "hello");
    
      return 0;
    }
    
    void foo(int x, double d, char* str)
    {
      printf("%d, %f, %s", x, d, str);
    }
    

    Hacker schrieb:

    Und würde es dann (wenn sie nicht verwendet werden können) syntaktisch Sinn machen, Code mit sowas vollzumüllen?

    Wir sprechen hier von Unterschieden, nicht ob irgendwelche Sprachfeatures Sinn machen oder nicht. Sowas ist am Ende nämlich meistens von subjektiver Natur.

    Grüssli



  • Dravere schrieb:

    Hacker schrieb:

    Und würde es dann (wenn sie nicht verwendet werden können) syntaktisch Sinn machen, Code mit sowas vollzumüllen?

    Wir sprechen hier von Unterschieden, nicht ob irgendwelche Sprachfeatures Sinn machen oder nicht. Sowas ist am Ende nämlich meistens von subjektiver Natur.

    Nein, so meinte ich das nicht. Ich glaube, jeder wird mit mir übereinstimmen, dass folgendes "Feature" Schwachsinn wäre:

    int foo();
    
    int main()
    {
        foo("adf", 5, 7.45);//Man kann nichts mit den Übergabeparametern tun, sie aber trotzdem "übergeben"
    }
    
    int foo(){return 0;}
    

    In deinem Beispiel wird die Funktion im bezug auf ihre Parameter redefiniert, was nicht war wie ich es mir Vorstellte. 😃


  • Administrator

    Hacker schrieb:

    Nein, so meinte ich das nicht. Ich glaube, jeder wird mit mir übereinstimmen, dass folgendes "Feature" Schwachsinn wäre:

    Nein, da wird dir nicht jeder zustimmen. Du denkst da ein wenig zu kurz.

    Hacker schrieb:

    In deinem Beispiel wird die Funktion im bezug auf ihre Parameter redefiniert, was nicht war wie ich es mir Vorstellte.

    Deine Vorstellung ist da anderswo falsch. Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration. Deklaration und Definition sind in C, wie auch in C++, unterschiedliche Dinge.

    Wieso du hier zu kurz denkst ist die folgende Situation:
    Du kannst hier eine Deklaration haben, aber unterschiedliche Definitionen zum Beispiel für unterschiedliche Plattformen (also durch Makros unterschieden) wobei der Aufruf sich nicht verändert. Zumindest habe ich es so schon in der Verwendung gesehen. Ich finde das zwar auch nicht sehr prickelnd, aber das ist am Ende eben subjektiv.

    #include <stdio.h>
    
    void foo();
    
    int main(void)
    {
      foo(10, 3.234, "hello");
    
      return 0;
    }
    
    #ifdef BLUB_UNIX
    
    void foo(int x, double d)
    {
      printf("%d, %f", x, d);
    }
    
    #else
    
    void foo(int x, double d, char* str)
    {
      printf("%d, %f, %s", x, d, str);
    }
    
    #endif
    

    Grüssli



  • Dravere schrieb:

    Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration.

    Klar. War auch schlecht umschrieben, nur sind die Übergabeparameter der Deklaration und der Definition unterschiedlich, also...

    Dravere schrieb:

    Deklaration und Definition sind in C, wie auch in C++, unterschiedliche Dinge.

    Das ist Selbstverständlich.

    Dravere schrieb:

    Du kannst hier eine Deklaration haben, aber unterschiedliche Definitionen zum Beispiel für unterschiedliche Plattformen (also durch Makros unterschieden) wobei der Aufruf sich nicht verändert. Zumindest habe ich es so schon in der Verwendung gesehen. Ich finde das zwar auch nicht sehr prickelnd, aber das ist am Ende eben subjektiv.

    #include <stdio.h>
    
    void foo();
    
    int main(void)
    {
      foo(10, 3.234, "hello");
    
      return 0;
    }
    
    #ifdef BLUB_UNIX
    
    void foo(int x, double d)
    {
      printf("%d, %f", x, d);
    }
    
    #else
    
    void foo(int x, double d, char* str)
    {
      printf("%d, %f, %s", x, d, str);
    }
    
    #endif
    

    Nun, ich verstehe nicht wieso man es nicht so macht:

    #include <stdio.h>
    
    #ifdef BLUB_LINUX
    
          void foo(int, double);
    
    #else
    
          void foo(int, double, char*);
    
    #endif
    
    int main(void)
    {
      foo(10, 3.234, "hello");
    
      return 0;
    }
    
    #ifdef BLUB_UNIX
    
          void foo(int x, double d)
          {
            printf("%d, %f", x, d);
          }
    
    #else
    
          void foo(int x, double d, char* str)
          {
            printf("%d, %f, %s", x, d, str);
          }
    
    #endif
    

  • Administrator

    Hacker schrieb:

    Dravere schrieb:

    Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration.

    Klar. War auch schlecht umschrieben, nur sind die Übergabeparameter der Deklaration und der Definition unterschiedlich, also...

    Also was? Das spielt keine Rolle.

    Hacker schrieb:

    Nun, ich verstehe nicht wieso man es nicht so macht:

    Probier dein Code für BLUB_UNIX zu kompilieren, nachdem du natürlich den Fehler korrigiert hast. Du hast nämlich einmal BLUB_LINUX und einmal BLUB_UNIX 😉

    Jedenfalls es kommt dann der folgende Fehler oder so ähnlich:

    error: too many arguments to function 'foo'
    

    Grüssli



  • Edit: Einen weiter unten.



  • Dravere schrieb:

    Jedenfalls es kommt dann der folgende Fehler oder so ähnlich:

    error: too many arguments to function 'foo'
    

    Grüssli

    Äh Nein? Es kommt kein Fehler, keine Warnung.



  • Hacker schrieb:

    Du bist doof.

    Verstehst du eigentlich wie peinlich das ist?



  • cooky451 schrieb:

    Hacker schrieb:

    Du bist doof.

    Verstehst du eigentlich wie peinlich das ist?

    Gut, gut. Schon weg. Nur, wieso postet er dann was nicht stimmt?


  • Administrator

    @Hacker,
    Du willst mich auf den Arm nehmen? Wie wäre es, wenn du das Makro BLUB_UNIX definierst, wie ich es dir gesagt habe.

    Ich habe nur ein #define BLUB_UNIX am Anfang eingefügt.
    http://ideone.com/8yFtr

    Also nochmals, wie war das mit dem "doof"? 🤡

    Grüssli



  • Hacker schrieb:

    Gut, gut. Schon weg. Nur, wieso postet er dann was nicht stimmt?

    Ich meinte nicht das "du bist doof". Ich meinte die ganze Diskussion. Was soll das? Das Sprachmittel ist offensichtlich nicht das sinnvollste, sonst hätte C++ es nicht rausgeworfen. Aber gerade dass C++ es rausgeworfen hat ist doch Tatsache, und ich verstehe nicht, wie man diese Tatsache verschwinden lassen will. Dass du das Sprachmittel blöd findest ändert doch überhaupt nichts.


Anmelden zum Antworten