C oder C++ - Lohnt es sich noch C zu lernen?



  • DEvent schrieb:

    Nachteile C:
    - man kann die Sichtbarkeit der Funktionen nicht beeinflussen
    - man hat globale Variablen

    Kann man wohl. Funktionen die außerhalb druckertreiber.c nicht sichtbar sein sollen, kommen halt nicht in den Header für externe Einbindungen rein. Und ich will dich nicht erschrecken, aber C++ hat auch globale Variabeln.

    volkard schrieb:

    java mag bei [3;14] zu suchen sein. gent mangels template-metaprogrammierung nicht so hoch. und setzt viel höher an, man kommt zum beispiel um Object und String ja gar nicht drumherum oder um exceptions.

    und visual basic.net auch bei [3;14]. perl bei [7;17].

    Magst du vielleicht deine Gedankengänge bezüglich Perl erläutern? Warum soll Java und VB.Net bei 3, Perl aber bei 7 anfangen?



  • minhen schrieb:

    Warum soll Java und VB.Net bei 3, Perl aber bei 7 anfangen?

    ka. vielelicht fängt perl auch bei 4 an. mir ging es nur dasrtum, daß c++ und c an der selben stelle anfangen.



  • DEvent schrieb:

    Nachteile C:
    ...
    - man hat globale Variablen

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮



  • Ok, mich stört ja auch nur, dass du Perl höher ansetzt und das auch noch so extrem höher.



  • TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    @minhen
    Zum Thema Verbergen: Da wären wir wieder bei der leidigen Diskussion über das Für und Wider von Header-Dateien. Jedenfalls bietet C++ einen meiner Meinung nach eleganteren Weg, Variablen zu verbergen.



  • Reyx schrieb:

    TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    Da stimme ich zu. Nur hat DEvent das nicht gesagt. Immer wieder lustig wie man sich Argumente zurechtlügt.



  • Reyx schrieb:

    TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    Kann mir mal jemand erklären, was eine globale Variable in C oder C++ sein soll? Ich kann keine finden.

    void f() { test = 3; }
    int test;
    

    klappt nicht, also ist test offenbar keine globale Variable, weil in f nicht sichtbar. Abgesehen davon gibt es sogar in C Möglichkeiten, die Sichtbarkeit zu begrenzen ('static').



  • Marc++us schrieb:

    llllllllllllol schrieb:

    Warum C verwendet wird? Weil die wichtigsten Betriebsysteme zum großen Teil (bsp : Windows) oder ganz (bsp: Linux) geschrieben sind.

    Wobei der Anteil in Windows dramatisch abnimmt... bei Vista wird man nicht mal mehr sagen können, daß C einen wichtigen Anteil hat (vielleicht außer dem Bootloader).

    Deswegen ist Windows Vista auch total verbugt *g*.

    @volkard: Aber wenn man in C OOP programmiert dann hat man (wie ich bereits sagte) höchstens einen objektorientierten Hintergedanken, wobei in C++ OOP vollkommen umgesetzt wird, sprich die Sprache unterstützt OOP auch mit Schlüsselwörtern.

    Klar muss man in C++ nicht OOP programmieren...klar kann man in C++ genauso lowlevel programmieren wie in C, aber dann ist es fast schon wieder C. 🙂



  • TactX schrieb:

    Reyx schrieb:

    TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    Da stimme ich zu. Nur hat DEvent das nicht gesagt. Immer wieder lustig wie man sich Argumente zurechtlügt.

    Es ist ein riesengroßer Nachteil Variablen global zu definieren. Da man keine Möglichkeit hat, diese z.B. readonly zu machen, könnte man theoretisch den Wert dieser Variable in einem beliebigen Codeteil ändern.
    zB in druckertreiber.c ist jetzt eine globale Variable DruckerZeile.
    in joistick.c könnte ich jetzt DruckerZeile verändern und damit den ganzen Druckerjob kaputt machen.
    Gut, ist ein schlechtes Beispiel aber mir fällt grad kein besseres ein.

    Aufjeden Fall bietet C++ mit Klassen ein weitaus bessere Möglichkeit Daten und Methoden zu kapseln und ihre Sichtbarkeit zu steuern.

    Seit wann ist die STL ein fester Bestandteil von C++ ? STL ist eine einfach Bibliothek, wie iostream, math, usw, benutzt es oder lass es.

    Was sind den die achsotolle Vorteile von C ?



  • STL ist Standard C++, nutzt es oder mach weiter C



  • problem an globalen variablen ist das sie zu abhängikeiten führen und jede funktion die globale variablen benutzt side effects bekommt, d.h.
    bei einer funktion wie

    int add(int a, int b)
    {
        return a + b;
    }
    

    kann man sich immer sicher sein was hinten rauskommt, die funktion ist "berechenbar"

    wenn die funktion side effekte hat kannst du dir nie recht sicher sein, es ist die hölle sowas zu debugen, du musst dir nicht nur die parameter ankucken welche du übergibst sondern auch 10 andere funktion die zu unterschiedlichen zeiten usw. aufgerufen werden



  • DEvent schrieb:

    TactX schrieb:

    Reyx schrieb:

    TactX schrieb:

    Es ist ein Nachteil globale Variablen zu haben? wtf? 😮

    Es ist kein Nachteil, globale Variablen zu haben. Es ist ein Nachteil, sie ausschließlich zu haben!

    Da stimme ich zu. Nur hat DEvent das nicht gesagt. Immer wieder lustig wie man sich Argumente zurechtlügt.

    Es ist ein riesengroßer Nachteil Variablen global zu definieren. Da man keine Möglichkeit hat, diese z.B. readonly zu machen, könnte man theoretisch den Wert dieser Variable in einem beliebigen Codeteil ändern.

    Wow, du hast den Sinn von globalen Variablen erkannt. 👍

    Dass es Situtation gibt wo man auf globale Variablen nicht verzichten kann muss ich nicht erklären, oder?



  • cout ist global. ist ganz praktisch so.
    der seed von rand und srand iast global. ist ganz praktisch so.
    ok, viel mehr beispiele fallen mir nicht ein. aber da muss doch irgend einer zugeben, daß gloable variablen ganz praktisch sein können.



  • DEvent schrieb:

    Seit wann ist die STL ein fester Bestandteil von C++ ? STL ist eine einfach Bibliothek, wie iostream, math, usw, benutzt es oder lass es.

    lölle!

    Seit wann? kA, auf jedenfall ist es nun im C++ Standard.



  • llllllllllol schrieb:

    DEvent schrieb:

    Seit wann ist die STL ein fester Bestandteil von C++ ? STL ist eine einfach Bibliothek, wie iostream, math, usw, benutzt es oder lass es.

    Seit wann? kA, auf jedenfall ist es nun im C++ Standard.

    Genaugenommen: nein. Die STL wurde von HP entwickelt und nur teilweise in den Standard aufgenommen.

    Beispiel: rope gehört klassischerweise zur STL aber nicht zum Standard.



  • wie pingelig.



  • Daniel E. schrieb:

    void f() { test = 3; }
    int test;
    

    klappt nicht, also ist test offenbar keine globale Variable, weil in f nicht sichtbar. Abgesehen davon gibt es sogar in C Möglichkeiten, die Sichtbarkeit zu begrenzen ('static').

    Das ist nicht ernst gemeint, oder?



  • Reyx schrieb:

    Daniel E. schrieb:

    void f() { test = 3; }
    int test;
    

    klappt nicht, also ist test offenbar keine globale Variable, weil in f nicht sichtbar. Abgesehen davon gibt es sogar in C Möglichkeiten, die Sichtbarkeit zu begrenzen ('static').

    Das ist nicht ernst gemeint, oder?

    Erklär doch mal, was eine globale Variable in C sein soll, in der Norm wirds nicht erklärt. Vorschläge: Eine, mit external linkage? Internal linkage? File Scope? Welche, mit globaler Lebenszeit (statisch)? Eine mit reserviertem Namen?

    Diese Sachen kann man alle mit einer gewissen Berechtigung "global" nennen, aber einen Qualifizierer der etwas überall sichtbar macht, existiert in C nicht (siehe Beispiel) und darum sollte man vielleicht dazusagen, was man unter "globalen Variablen" verstehen möchte, bevor man Wischiwaschiargumentationen führt, wie hier zu bewundern.



  • Vielleicht indem du die Variable deklarierst, bevor du sie versucht, zu benutzen? Das global betrachte ich dabei aber natürlich in sequenzieller Reihenfolge: Sprich, die globale Variable ist dann global, sobald sie (zur Laufzeit?) deklariert wurde. Allerdings hast du Recht, dann kann man wieder sagen, dass die Funktionen vor der Deklaration sie auch benutzen können müssten ... ach, in der Tat schwer zu definieren ... :-\

    Ich schätze mal, eine Variable, die im globalen Namespace vor jeder einzubindenden Datei (#include) definiert wird; theoretisch auch nicht, aber praktisch schon eher, oder?



  • Globale Variablen sind für mich wie cout oder cin. Wobei cout und cin Objekte sind. Also globale Variablen, sind Variablen, die im globalen Namespace sind und die man durch ein einfaches #include verwenden kann. Ob es so nütztlich ist seed bei rand() global zu machen, wage ich zu bezweifeln.

    Jetzt nennt mir doch endlich mal die Vorteile von C gegenüber C++ und bitte keine pseudo-Argumente wie "C ist ja so viel schneller als C++".

    Seit wann? kA, auf jedenfall ist es nun im C++ Standard.

    Ja und? Zwingt dich jemand die STL zu benutzen ? Meldet der Compliter einen Fehler wenn du statt std:string ein char* benutzt ?

    Man kann intern gerne mit primitiven Typen arbeiten, aber nach aussen hin sollte man die STL benutzen.
    Wieso? Wegen der Benutzerfreundlichkeit, der Standardkonformalität und der niedrigen Fehleranfälligkeit.
    Aber man muss natürlich nicht.


Anmelden zum Antworten