nicht Komplett abwärtskompatibel zu C?
-
Bisher dachte ich eigentlich immer, C++ sei komplett abwärtskompatibel zu C.
Nun habe ich aber ein Codestück, was in C funktioniert, aber nicht in C++ und das wundert mich sehr.#include <stdio.h> #include <stdlib.h> void test(a) int a; { printf("%d\n", a); } int main() { test(2); system("pause"); }natürlich weiß ich, dass es sowieso schöner ist, void test(int a) zu schreiben, ich frage mich dadurch bedingt nur in wie weit C++ wirklich zu C abwärtskompatibel ist?
-
C++ ist nicht abwärtskompatibel. Aber dein Programm ist auch kein gültiges C89, auf dessen Basis der C++-Standard veröffentlicht wurde.
-
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.htmEdit: Es gab aber natürlich auch schon Inkompatibilitäten zwischen C89 und C++98.