Funktionen und...



  • PAD schrieb:

    Interessanterweise hat Schildt an beiden Standards aktiv mitgearbeitet, was für eine gewisse Qualifikation sprechen sollte.

    Wobei man 'aktiv mitgearbeitet' als 'hat für seinen Platz im Komitee bezahlt, war aber nie anwesend' lesen muss.



  • Durch deinen Link bin ich da gelandet

    http://www.accu.org/bookreviews/public/reviews/t/t001453.htm

    Ich muß halt den miesen Weg gehen, da ich schon länger im Geschäft bin als es C++ gibt, und meine Arbeiten typischerweise harwarenah sind.

    Das der Umstieg von prozudural nach OOP nich einfach ist, ist offensichtlich



  • PAD schrieb:

    Durch deinen Link bin ich da gelandet

    http://www.accu.org/bookreviews/public/reviews/t/t001453.htm

    ne, ich meinte den link der da drueber stand.

    Herbert Schildt: Any Book on C or C++ .

    Ich muß halt den miesen Weg gehen, da ich schon länger im Geschäft bin als es C++ gibt, und meine Arbeiten typischerweise harwarenah sind.

    Punkt 1 ist klar, Punkt 2 musst du mir erklaeren.
    warum kann man C++ nicht hardware nahe einsetzen?

    Das der Umstieg von prozudural nach OOP nich einfach ist, ist offensichtlich

    eben. deswegen sollte man nicht unnoetigerweise C vor C++ lernen.



  • Bist du der Meinung, dass man beide Sprachen nicht parallel nutzen kann?



  • CarstenJ schrieb:

    Bist du der Meinung, dass man beide Sprachen nicht parallel nutzen kann?

    was heisst parallel?
    gleichzeitig in einem projekt: nein (dh, können schon, ist aber mies)
    gleichzeitig in 2 verschiedenen projekten: durchaus möglich wenn man bei 2 projekten den überblick behalten kann.
    gleichzeitig lernen: ne, da kommt man nur durcheinander.

    das problem ist:
    C und C++ sind verschiedene sprachen, doch leider ist die syntax identisch und teilweise die library, das macht es schwer diese beiden sprachen voneinader zu trennen.



  • Ich nutze beide Sprachen parallel. Der derzeitige Schwerpunkt ist C.
    Alle alten Projeke werden in C bleiben und für die nächsten 10-20 Jahre auch in C gewartet
    Aktuelle Projekte werden in einem Mischmasch erstellt (siehe unten).
    Neue Projekte hoffe ich dann vielleicht reinrassig in C++ zu erstellen, falls es Sinn macht.

    Da ich mit einer Gruppe von Programmieren arbeite, muß ich erst dafür sorgen das wir alle auf einem Stand sind
    (das wird noch etwas dauern).

    ➡ Momentan nutzen wir die reine C-Syntax, allerdings haben jetzt schon die Files die Endung cpp, so das sie mit dem C++-Compiler übersetzt werden.
    ➡ Die Libraries die ich zur Verfügung stelle sind derzeit großteils in C, bestehende Libraries werden auch nicht umgestellt.
    ➡ An den Stellen an denen mir die Objekt Orientierierung jetzt schon sinnvoll erscheint, stelle ich die Libraries als C++ zur Verfügung

    Es stimmt schon die beiden grundlegen Denkweisen von C (procedural) und C++ (Objekt orientiert) sind sehr verschieden, ich meine aber das man bei Testständen das beste aus beiden Welten nehmen kann.

    warum kann man C++ nicht hardware nahe einsetzen?

    Durch die Methodik die in C++ eingesetzt wird ist imho zum einen der Overhead pro Funktion größer
    und zweitens glaube ich das zeitverhalten nicht so eindeutig wie in C ist. Ich lasse mich aber gerne vom Gegenteil überzeugen.

    eben. deswegen sollte man nicht unnoetigerweise C vor C++ lernen.

    Deinem unnötigerweise wiederspreche ich.
    Erstens, ich programmiere schon langer als es C++ gibt (das ist abe Nebensache)
    Zweitens bin ich der Auffassung das nur wenn man beide Ansätze beherrst (oder zumindest kennt) die bessere Entscheidung trifft bei der Softwareanalyse. Man sollte erst dann Fahrrad fahren lernen wenn man laufen kann.
    Drittens In meinem Arbeitsbereich arbeiten wir teilweise noch bis aud Assemblerebene, un da gibts keine Objekt orientierung.

    Dazu habe ich mich schon einmal ausgelssen unter http://www.c-plusplus.net/forum/viewtopic.php?t=43273 Seite 5



  • C++ hat bei einer Funktion sicher keinen Overhead gegenueber C

    uU machen schlechte compiler mit objekten langsameren code als ohne - kann ich leider nicht beurteilen da ich nur Compiler fuer einen PC kenne.

    Wenn man C schon kann, kann man es logischerweise vorher nicht verlernen bevor man C++ lernt.
    aber wenn man kein C kann, dann ist es nicht sinnvoll zuerst C zu lernen und dann erst C++.
    das wird dir nahezu jeder C++ Programmierer bestaetigen koennen.



  • Ich meinte damit nicht den eigentlichen Funktionsaufruf sondern eher was passieret wenn ich eine Instanz eines Objects erzeuge, das Durchlaufen der zugehörigen Klasenhierachie bis ich den engültigen Konstruktor gefunden habe, das erkennen der richtigen überladenen Funktion und ähnliche Punkte. Die höhere Abstraction hat definitiv eine Auswrikung auf die zeitliche Leistungsfähigkeit des Systems, wegen des höheren Verwaltugsaufwandes.
    Das wird in der allgemeinen Programmierung bei weitem nicht so ins Gewicht fallen wie bei hardwarenaher Pogrammierung.

    aber wenn man kein C kann, dann ist es nicht sinnvoll zuerst C zu lernen und dann erst C++.
    das wird dir nahezu jeder C++ Programmierer bestaetigen koennen.

    Das ist der Punkt den ich anzweifele, speziell da du ja selber sagst, das jeder C++ Programmierer das bestätigt.

    Wie sieht es bei denen aus die von C kommen, sagen die das gleiche?
    Was sagen Leute die sich damit beschäftigen und keinem der beiden Lager angehören?
    🙂



  • das erkennen der richtigen überladenen Funktion und ähnliche Punkte.

    class Bar {};
    int  foo(int);
    char foo(Bar b);
    
    template <bool b> struct static_assert;
    template <> struct static_assert<true>{};
    
    int main()
    {
    static_assert<sizeof(foo(Bar())) == sizeof(int)> s;
    }
    

    Na, fällt dir vielleicht was auf?
    Macht keinen Sinn, deine Aussage.

    wenn ich eine Instanz eines Objects erzeuge, das Durchlaufen der zugehörigen Klasenhierachie bis ich den engültigen Konstruktor gefunden habe

    Da nicht gesucht werden muss, dauerts auch nicht bis gefunden wird. Wenn du natürlich tiefe Hierarchien und Objekten mit nicht trivialen Konstruktoren hast, werden dementsprechend viele Konstruktoren aufgerufen. Nur vergleichst du jetzt schon wieder Birnen mit Orangen. Ist ja nicht so, dass C++ Vererbung erzwingen würde. Und wenn es sinn macht eine Hierarchie zu basteln, dann wirst du im C Programm eine ähnliche Komplexität haben und auch dort wirst du an irgendeinem Punkt Daten initialisieren müssen.

    Die höhere Abstraction hat definitiv eine Auswrikung auf die zeitliche Leistungsfähigkeit des Systems, wegen des höheren Verwaltugsaufwandes.

    Käse. Erstens gibt es keine inhärent höhere Abstraktion und zweiten führt Abstraktion in C++ nicht automatisch zu Geschwindigkeitseinbußen.



  • Denoch bei Systemen die ein sinnvolles Realtimeverhalten haben sollen und mit Hardware kommunizieren sind die Methoden der sich C++ bedient manchmal von ihrem zeitlichen Ablauf
    nicht nachvollziehbar (speziell nicht wiederholbar).

    Wovon redest du?
    Mal abgesehen davon, dass der Satz sehr vage ist, ist er, so wie ich ihn
    verstehe, auch noch falsch.
    Die genannten Probleme kenne ich hauptsächlich von Heap-Operationen. Diese verhalten sich häufig nicht-deterministich. Aber das ist freilich kein C++ Problem. Einen (asynchron) laufenden Garbage-Collector hat C++ ja auch nicht.

    Durch die Methodik die in C++ eingesetzt wird ist imho zum einen der Overhead pro Funktion größer

    Was glaubst du was in C++ für eine Methodik eingesetzt wird?
    Ich kann nur sagen: Käse. Lies z.B. Stanley B. Lippman "Inside the C++ Object Model".

    und zweitens glaube ich das zeitverhalten nicht so eindeutig wie in C ist. Ich lasse mich aber gerne vom Gegenteil überzeugen.

    Vage und zumindest käsig.
    Lies z.B. Stanley B. Lippman "Inside the C++ Object Model".

    Funktionsaufrufe unterscheiden sich nicht zwischen C und C++. Deshalb kann ein C++ Programm ja auch ohne Probleme C-Funktionen aufrufen. Da C++ Funktionsüberladung unterstützt müssen Funktionsnamen hier allerdings "gemangelt" (kleiner Einstieg: http://my.execpc.com/~geezer/osd/cpp/) werden. Das passiert aber zur Compilezeit und hat natürlich keine Performanceauswirkungen (es wird ja nur der Name geändert).

    Die höhere Abstraction hat definitiv eine Auswrikung auf die zeitliche Leistungsfähigkeit des Systems, wegen des höheren Verwaltugsaufwandes

    Welchen Verwaltungsaufwand meinst du genau?

    Ich denke du solltest dich noch mal ausführlich informieren. So wirken deine Aussagen doch sehr nach "ich habe keine Ahnung wie's funtioniert, behaupte aber trotzdem einfach mal irgendwas".


Anmelden zum Antworten