Mehrere Funktionsdeklarationen



  • nwp2 schrieb:

    Praktisch alle C-Compiler können auch C++ ...

    falsch. umgekehrt stimmts auch nicht.

    nwp2 schrieb:

    C++ ist garnicht so übel.

    schau hier: http://yosefk.com/c++fqa/ vielleicht ändert sich dann deine meinung.

    nwp2 schrieb:

    der Hauptvorteil liegt darin, dass man C-Code schreiben kann.

    ja, der rückgabewert von malloc muss plötzlich gecastet werden und so, *fg*
    🙂



  • fcxvbxcvb schrieb:

    Ich hoffe schon ):

    Warum denn? Sag mal was du vorhast, das kann man sicher auch anders auf saubere Weise hinbekommen.

    Praktisch alle C-Compiler können auch C++

    Eine seltsame Feststellung. Warum gibt's denn dann zwei verschiedene Foren für die beiden?

    http://yosefk.com/c++fqa/picture.html schrieb:

    The pair of words "almost compatible" is almost meaningless - for many technical purposes, compatibility is a binary thing. "Compatible", on the other hand, can have several meanings.

    Das klingt schon vernünftiger.

    nwp2 schrieb:

    Variablendeklarationen auch nicht am Blockanfang

    Die gibt's in C nicht?

    nwp2 schrieb:

    Funktionsüberladung

    Eine tolle Sache! Wie war das nochmal?

    volatile int i = 42;
    std::cout << i;
    

    😕



  • µngbd schrieb:

    nwp2 schrieb:

    Funktionsüberladung

    Eine tolle Sache! Wie war das nochmal?

    volatile int i = 42;
    std::cout << i;
    

    hehe, der schrecken aller c++ fans.
    ach ja, es muss übrigens ein volatile int***** sein.
    🙂



  • Verdammt. Sofort richtigstellen:

    int j = 42;
    volatile int *p = &i;
    std::cout << *p;
    

    Aber grosse Vorwürfe mach ich mir nicht wegen dem Fehler. C++ ist eben schwer zu lernen.
    🙂



  • µngbd schrieb:

    Verdammt. Sofort richtigstellen:

    int j = 42;
    volatile int *p = &i;
    std::cout << *p;
    

    nee, so auch nicht. so geht das:

    volatile int *p = (volatile int*)42;
    std::cout << p;
    

    zur erklärung:

    http://yosefk.com/c++fqa/picture.html schrieb:

    It is impossible to "know" C++ - it keeps surprising one forever. For example, what does the code cout << p do when p is a volatile pointer? Hint: as experienced people might expect, there's an unexpected implicit type conversion involved.

    *gg*
    🙂



  • fricky schrieb:

    nee, so auch nicht. so geht das:

    volatile int *p = (volatile int*)42;
    std::cout << p;
    

    Dabei hatte ich extra den CPP-Compiler angeworfen (ich mach das nur selten). Mit dem g++ geht's auch so wie bei mir (abgesehen von dem Tippfehler mit i und j).

    Aber was soll's: It is impossible to "know"....
    🙂



  • Ui, da hab ich ja was angerichtet.

    µngbd schrieb:

    fricky schrieb:

    nee, so auch nicht. so geht das:

    volatile int *p = (volatile int*)42;
    std::cout << p;
    

    Wie gesagt, Operatorüberladung gehört zu den bösen Dingen die man am besten niemals machen sollte. streams bitshiften und dann wird was auf dem Bildschirm ausgegeben 😕 *schüttel*

    µngbd schrieb:

    Praktisch alle C-Compiler können auch C++

    Eine seltsame Feststellung. Warum gibt's denn dann zwei verschiedene Foren für die beiden?

    Weil die Sprachen eine andere Herangehensweise haben. Es ist schon ein Unterschied ob man printf benutzt oder Streams bitshiftet.
    Aber wie gesagt, der Hauptvorteil von C++ ist dass man C schreiben kann. Und printf lässt sich auch in C++ super benutzen.

    µngbd schrieb:

    nwp2 schrieb:

    Variablendeklarationen auch nicht am Blockanfang

    Die gibt's in C nicht?

    Nö.

    void foo(){
        printf("Ich zähle jetz bis 3\n");
        int i; //geht nicht in C weil steht nicht am Anfang des Blocks
        i = 0;
        while (i<3) printf("%d ", ++i);
    }
    

    Halte ich für eine blödsinnige Einschränkung.

    Ach ja, Kommentare mit // machen gehört auch zu den Nettigkeiten von C++.

    Ich glaube wir sind uns alle einig dass C++ im Allgemeinen nicht so toll und im Speziellen auch mal bescheuert ist, aber nicht alles von C++ ist schlecht und die guten Sachen kann man ruhig nutzen.

    Ich zum Beispiel hatte in C solche Funktionen gebastelt:

    struct stack;
    struct stack *createStack();
    void pushStack(stack *s, void *value);
    void *popStack(stack *s);
    void *deleteStack(stack *s);
    void *printStack(stack *s);
    

    Dann hab ich mich mit C++ beschäftigt und man schreibt class statt struct, die Funktionen kommen mit in die Class rein und die Selbstreferenz braucht man nicht als Parameter übergeben, der kommt immer implizit über this mit.

    class stack{
        stack();
        void push(void *value);
        void *pop();
        ~stack();
        print();
    };
    

    Ist eigentlich das gleiche, aber sieht irgendwie netter aus.

    Und irgendwie sieht das hier:

    struct stack *s = new stack;
    s->push(v1);
    s->push(v2);
    v3 = s->pop();
    s->print();
    delete s;
    

    besser aus als

    struct stack *s = createStack();
    pushStack(s, v1);
    pushStack(s, v2);
    v3 = popStack(s);
    printStack(s);
    deleteStack(s);
    free(s);
    

    Finde ich zumindest. C++ hat schon Vorteile, man muss nur etwas länger suchen. Und wenn C++ mal wieder bescheuert ist nimmt man halt C.



  • nwp2 schrieb:

    Wie gesagt, Operatorüberladung gehört zu den bösen Dingen die man am besten niemals machen sollte.

    Sag das der CPP-Bibliothek!

    nwp2 schrieb:

    Nö.

    Doch, doch. Alles bei C99 dabei. Wird irgendwann in den nächsten 50 Jahren sicher allgemein akzeptiert werden.

    We allready have persistent objects, they're called files.

    Bevor du zum Fachidioten wirst: schau dir mal eine Sprache an, die syntaktische Abstraktionen kann. Also Makros, die am Syntaxbaum arbeiten, und nicht nur auf Textebene (Lisp ist wahrscheinlich das klassiche Beispiel). Dann für ein halbes Jahr ab in ein Kloster und du wirst sicher das optimale Objektsystem erfinden.
    🙂



  • nwp2 schrieb:

    Und irgendwie sieht das hier:

    struct stack *s = new stack;
    s->push(v1);
    s->push(v2);
    v3 = s->pop();
    s->print();
    delete s;
    

    besser aus als...

    ^^wenn du das toll findest, sowas kannste dir in C mit function pointers und #defines auch hinfummeln.

    nwp2 schrieb:

    C++ hat schon Vorteile, man muss nur etwas länger suchen.

    mitgliedschaft by scientology oder eine schwere krankheit haben auch vorteile. man muss nur etwas länger suchen. *fg*
    🙂



  • Der Unterschied

    ;fricky schrieb:

    nwp2 schrieb:

    C++ hat schon Vorteile, man muss nur etwas länger suchen.

    mitgliedschaft by scientology oder eine schwere krankheit haben auch vorteile. man muss nur etwas länger suchen. *fg*
    🙂

    Der wesentliche Unterschied ist, dass man die Nachteile nicht ertragen muss weil man spontan auf C wechseln kann.

    Aber genug mit dem Unsinn, hat mit mehreren Funktionsdeklarationen nichts mehr zu tun.


Anmelden zum Antworten