nicht Komplett abwärtskompatibel zu C?



  • void test(int a)
        {
        printf("%d\n", a);
        }
    

    wenn schon 🙂



  • C++ ist nicht abwärtskompatibel. Aber dein Programm ist auch kein gültiges C89, auf dessen Basis der C++-Standard veröffentlicht wurde.

    ist es nicht? nadann ist ja gut. Ist mir nur aufgefallen, als ich versucht habe Ruby mit einem C++ Compiler zu komplimieren. Und der Visual Studio C Compiler sowie GCC(MinGW) unterstützen es. Aber nicht die C++ Äquivalente
    @der Gast da:
    soweit war ich auch schon^^



  • Hmm naja C kennt nicht das Schlüsselwort "class" usw. Es ist zwar OOP möglich, aber hart.

    #include <stdio.h>
    #include <stdlib.h>
    
    void test(int a)
    {
        printf("%d\n", a);
    }
    
    int main()
    {
        test(2);
        system("pause");
    }
    

    Ist doch pures C?!

    #include <iostream>
    
    template <typename T>
    void print(T const& data) { std::cout << data << std::endl; }
    
    int main()
    {
        print<int>(2);
        std::cin.get();
    }
    

    ist doch C++ 🙂



  • was hat das mit der Frage zu tun?



  • rüdiger schrieb:

    C++ ist nicht abwärtskompatibel. Aber dein Programm ist auch kein gültiges C89, auf dessen Basis der C++-Standard veröffentlicht wurde.

    Hmmmm .. ich hatte da mal "eine alte C-Form" im Kopf, die etwas in der Art zulässt:

    void test(a)
       int a;
    {
      printf("%d\n", a);
    }
    

    als Äquivalent zu

    void test(int a)
    {
      printf("%d\n", a);
    }
    

    ... weiß aber nicht, ob das K&R, C89 oder was Anderes war.
    Ich bin jedenfalls schonmal über so einen Code gestolpert und da war er erlaubt.

    Gruß,

    Simon2.



  • Ja, das ist K&R. Der ANSI-C-Standard war seit Anfang der 80er in Arbeit, da war schon abzusehen, dass diese Syntax irgendwann nicht mehr erlaubt sein wird. Deshalb ist das in C++ auch nicht drin.

    Die Deklaration 'int a;' ist übrigens überflüssig, wenn nichts angegeben ist, wird immer int angenommen:

    foo(a, b)
    char* b;
    {
      ...
    }
    


  • Denk mal du meinst Delphi 😃

    procedure foo(a: Integer)
        var b: Integer
    begin
        b = a + b;
        ShowMessageFmt('%d',[a]);
    end;
    

    ... oder so 😉



  • Bashar schrieb:

    Ja, das ist K&R....

    Aha !! 💡

    Danke für die info. 😋

    Bashar schrieb:

    ...Die Deklaration 'int a;' ist übrigens überflüssig, wenn nichts angegeben ist, wird immer int angenommen....

    Stimmt !
    Aber gut, dass das abgeschafft wurde.

    ... und dass C++ nicht mehr abwärtskompatibel zu K&R ist. 😃

    Gruß,

    Simon2.



  • Ja, das ist K&R

    ok, das erklärt einiges^^
    Danke.



  • Hier werden die meisten (alle?) Inkompatibilitäten zwischen C99 (dem aktuellen C-Standard) und C++98 (dem aktuellen C++-Standard) aufgelistet und beschrieben:
    http://david.tribble.com/text/cdiffs.htm

    Edit: Es gab aber natürlich auch schon Inkompatibilitäten zwischen C89 und C++98.


Anmelden zum Antworten