PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Was ist C/C++?


Gast
2005-12-14, 19:36:55
Ich kenne C.
Ich kenne C++.

Aber was ist C/C++? Liest man ziemlich oft, konnte aber noch nicht rausfinden was das genau ist.

Gast
2005-12-14, 19:39:35
das ist eben beides. gibt halt leute, die können C/C++ programmieren.

maximAL
2005-12-14, 20:27:04
das ist eben beides.
oder nichts von beiden.

Lokadamus
2005-12-14, 20:38:05
Ich kenne C.
Ich kenne C++.

Aber was ist C/C++? Liest man ziemlich oft, konnte aber noch nicht rausfinden was das genau ist.mmm...

C ist eine Untermenge von C++, sprich, du kannst in C++ auch einfach C schreiben und es wird kompiliert.
Du kannst aber nicht C++ in einem für C ausgelegten Compiler benutzen (allerdings dürfte es schwer werden, so einen zu finden).
So hab ich es zumindest verstanden.

Expandable
2005-12-14, 22:33:19
Das ist C geteilt durch C++ also 1/++ :D

Nee, im Ernst... das verwendet man z.B., wenn man sagen will, dass etwas sowohl in C als auch in C++ funktioniert (wobei man generell sagen kann, dass alles, was in C funktioniert, auch in C++ funktioniert - umgekehrt allerdings nicht).

zeckensack
2005-12-14, 23:27:43
Das ist C geteilt durch C++ also 1/++ :DNein. Das ist Postfix-Inkrement, und das Ergebnis ist deswegen entweder eine todbringende Exception (wenn C=0 ist) oder 1.

Ich wüsste aber auch nicht wieviel 1/++ sein soll.

Wäre es Präfix-Inkrement, also C/++C, dann wäre das Ergebnis eine Exception für C=-1 und ansonsten C/(1+C).

Corrail
2005-12-15, 08:46:51
mmm...

C ist eine Untermenge von C++, sprich, du kannst in C++ auch einfach C schreiben und es wird kompiliert.

Das stimmt nicht immer ganz. (http://en.wikipedia.org/wiki/C_plus_plus#Incompatibility_with_C)

patermatrix
2005-12-15, 09:16:15
Nein. Das ist Postfix-Inkrement, und das Ergebnis ist deswegen entweder eine todbringende Exception (wenn C=0 ist) oder 1.

Ich wüsste aber auch nicht wieviel 1/++ sein soll.

Wäre es Präfix-Inkrement, also C/++C, dann wäre das Ergebnis eine Exception für C=-1 und ansonsten C/(1+C).
;D
Freak at his best!

Gast
2005-12-15, 11:52:55
Ist wahrscheinlich C und C++ Mischmasch gemeint. (frickeln)

Trap
2005-12-15, 12:03:46
Ist wahrscheinlich C und C++ Mischmasch gemeint. (frickeln)
Ja, sowas wie MFC ;)

micki
2005-12-15, 13:33:45
Nein. Das ist Postfix-Inkrement, und das Ergebnis ist deswegen entweder eine todbringende Exception (wenn C=0 ist) oder 1.

müßte doch C/C ++ sein, also 1++, nach einer zuweisung also 1, somit ist eigentlich bewiesen dass OOP überflüssig ist.. *harharhar*

MfG
micki

Expandable
2005-12-15, 15:22:43
Nein. Das ist Postfix-Inkrement, und das Ergebnis ist deswegen entweder eine todbringende Exception (wenn C=0 ist) oder 1.

Ich wüsste aber auch nicht wieviel 1/++ sein soll.

Wäre es Präfix-Inkrement, also C/++C, dann wäre das Ergebnis eine Exception für C=-1 und ansonsten C/(1+C).

*lol* Das war jetzt von meiner Seite aus weder ernst gemeint noch hab ich da großartig irgendwelche Gedanken reingesteckt... aber langsam bekomm ich hier Angst ;o)

Imperator Katarn
2005-12-15, 16:54:55
Ich kenne C.
Ich kenne C++.

Aber was ist C/C++? Liest man ziemlich oft, konnte aber noch nicht rausfinden was das genau ist.siehst du Zeckensack, genau solche Leute wie diesen Gast hier meinte ich als ich davon sprach, daß sich in de.comp.lang.c und de.comp.lang.iso-c++ Leute tummeln, die immer ein ganz furchtbares Theater machen, wenn einer so grundverschiedene Dinge wie C und C++ auch nur in einem Atemzug erwähnt.
Wirf mal einen Blick in diese NGs, da sind solche Statements an der Tagesordnung.

Coda
2005-12-15, 22:27:20
C oder C++. So wie der Schrägstrich überall verwendet wird.

Gast
2005-12-15, 23:00:44
Es gibt auch Bücher auf denen C/C++ steht. Und da kann es ja irgendwie nicht 'oder' bedeuten. "C oder C++ Buch."

Expandable
2005-12-15, 23:07:05
Oder nicht im Sinn von "entweder oder" sondern im (rein logischen) Sinn von oder... Also entweder C, oder C++ oder beides ;)

Shink
2005-12-16, 08:04:07
mmm...

C ist eine Untermenge von C++, sprich, du kannst in C++ auch einfach C schreiben und es wird kompiliert.
Du kannst aber nicht C++ in einem für C ausgelegten Compiler benutzen (allerdings dürfte es schwer werden, so einen zu finden).
So hab ich es zumindest verstanden.
Früher, als es z.B. M$ noch keinen C++ Compiler hatte, gabs Leute, die einen C++ - nach - C - Übersetzer verwendeten, damit das geht.

ollix
2005-12-16, 10:43:34
in einem für C ausgelegten Compiler benutzen (allerdings dürfte es schwer werden, so einen zu finden). Ohne das jetzt genau zu wissen, kann ich mir gut vorstellen, daß es das im Embedded Bereich weiterhin durchaus gibt.

Baalzamon
2005-12-16, 11:53:18
Nein. Das ist Postfix-Inkrement, und das Ergebnis ist deswegen entweder eine todbringende Exception (wenn C=0 ist) oder 1.

Ich wüsste aber auch nicht wieviel 1/++ sein soll.

Wäre es Präfix-Inkrement, also C/++C, dann wäre das Ergebnis eine Exception für C=-1 und ansonsten C/(1+C).

Eigentlich darph man das C garnicht wegkürzen, da C++ => C+1. Da müsste man vorher das C ausklammern und dann hätte man etwas wie : 1 / (1+1/C) ;)

zeckensack
2005-12-16, 12:09:30
Also eigentlich war das als Scherz gemeint. War wohl einigen zu trocken :usweet:
Eigentlich darph man das C garnicht wegkürzen, da C++ => C+1.Nö. Dass genau das eben nicht stimmt war der einzige plausible Grund für mein Posting.
#include <stdio.h>
int
main()
{
int C=42;
if (C==C++) printf("Bork!\n");
else printf("Gnarf!\n");
return(0);
}

Senior Sanchez
2005-12-16, 20:39:54
Also eigentlich war das als Scherz gemeint. War wohl einigen zu trocken :usweet:
Nö. Dass genau das eben nicht stimmt war der einzige plausible Grund für mein Posting.
#include <stdio.h>
int
main()
{
int C=42;
if (C==C++) printf("Bork!\n");
else printf("Gnarf!\n");
return(0);
}

Bork!

*ggg*

Präfix- und Postfixinkrement sag ich da mal *g*

Coda
2005-12-16, 22:24:31
Früher, als es z.B. M$ noch keinen C++ Compiler hatte, gabs Leute, die einen C++ - nach - C - Übersetzer verwendeten, damit das geht.Das ändert nichts daran, dass C keine Untermenge von C++ ist.

Präfix- und Postfixinkrement sag ich da mal *g*Ja, deshalb ist "for(int i=0;i<x;i++)" auch Schwachsinn, es sollte "for(int i=0;i<x;++i)" heißen, was man sich bei C++ auch angewöhnen sollte, denn bei Iteratoren macht das einen Unterschied.

Senior Sanchez
2005-12-16, 22:35:14
Das ändert nichts daran, dass C keine Untermenge von C++ ist.

Ja, deshalb ist "for(int i=0;i<x;i++)" auch Schwachsinn, es sollte "for(int i=0;i<x;++i)" heißen, was man sich bei C++ auch angewöhnen sollte, denn bei Iteratoren macht das einen Unterschied.

nutzt man allerdings arrays die mit dem Index 0 beginnen, so hat die erste Variante schon Sinn ;)

Inwiefern macht das einen Unterschied?

GloomY
2005-12-16, 22:35:43
Das ändert nichts daran, dass C keine Untermenge von C++ ist.Du wirst lachen, aber ich habe hier tatsächlich ein Buch, indem genau das behauptet wird:

"Till Jeske - C++" (ISBN 3-8273-1666-9)

Ich weiss - mittlerweile - dass das nicht so ist, obwohl ich lange Zeit davon überzeugt war...

Coda
2005-12-16, 22:42:58
nutzt man allerdings arrays die mit dem Index 0 beginnen, so hat die erste Variante schon Sinn ;)Nein. Das Resultat ist exakt das gleiche, nur produziert i++ ein zusätzliches temp-value wenn der Compiler total hirnverblödet ist.

Ein Alleinstehendes i++ ist nie sinnvoll, weil man das return-value ja gar nirgends verwendet, den Compiler aber anweist eben das bevor er inkrementiert zwischenzuspeichern und danach zurückzugeben.

Inwiefern macht das einen Unterschied?"operator ++(int)" (postfix) und "operator++()" (prefix) werden seperat überladen und die prefix-Version braucht eben auch ein temp, das in diesem Fall aber nicht so ganz trivial wegoptimiert werden kann - wenn überhaupt.

Radikalisiert: Postfix kann ein grünes Eichhörnchen auf den Bildschirm anzeigen, während Prefix das CD-ROM-Laufwerk aufgehen lässt :tongue:

Ich weiss - mittlerweile - dass das nicht so ist, obwohl ich lange Zeit davon überzeugt war..."Gutes C" lässt sich auch mit einem C++-Compiler übersetzte, somit ist dieser Irrglaube gar nicht so schlecht.

Senior Sanchez
2005-12-16, 22:51:17
arg, stimmt, hatte da was verwechselt.

Dankeschön aber für die Aufklärung und die Erläuterung :)

maximAL
2005-12-17, 16:31:08
Das ändert nichts daran, dass C keine Untermenge von C++ ist.
warum bestehen C++ programmierer immer so wehement darauf?

bitte, auch wenn C99 keine untermenge mehr ist, und es vorher vielleicht auch unterschiede im detail gab - zum konzept von C++ gehörte ursprünglich weitestgehende C-kompatibiltät. das ist schon weit mehr, als eine ähnliche syntax.

Trap
2005-12-17, 16:46:23
Weil es Code gibt der sowohl als C als auch als C++ gültig ist, aber in beide Sprachen unterschiedliche Ergebnisse liefert.

Ja, das sind nur ganz wenige Fälle, trotzdem gibt es sie und man kann damit auf die Nase fallen wenn man große C-Projekte mit einem C++-Compiler übersetzt.

Lokadamus
2005-12-17, 19:41:26
Weil es Code gibt der sowohl als C als auch als C++ gültig ist, aber in beide Sprachen unterschiedliche Ergebnisse liefert.

Ja, das sind nur ganz wenige Fälle, trotzdem gibt es sie und man kann damit auf die Nase fallen wenn man große C-Projekte mit einem C++-Compiler übersetzt.mmm...

Womit wir beim nächsten Problem wären:
Wirft jeder Compiler das gleiche Ergebnis raus? Soviel ich weis, leider nicht immer und da (fast) alle Befehle in C++ vorhanden sind, ist C eine Untermenge davon. Persönlich sehe ich es wie mit ASM. Es gibt 2x ASM als Sprache (Intel versus AT&T- Syntax) und jeweils eine eigene Varianten aufgrund des eingesetzten Compilers. Man hat unter TASM eine etwas andere Syntax wie unter MASM, aber dennoch spricht man bei beiden von ASM ...

Coda
2005-12-17, 20:16:33
warum bestehen C++ programmierer immer so wehement darauf?Ich bestehe nicht "wehement" drauf, das ist einfach die Wahrheit.

In C geht z.B. das hier (old-style function declaration):

void foo(x,y) int x; char y;
{
...
}
Oder das hier (Pointer-Zuweisung ohne gleichen Typ):

void foo()
{
int *ipointer;
char *cpointer;
cpointer = ipointer;
}

Trap
2005-12-17, 20:26:09
Ja, das gibt aber Fehlermeldungen. Schlimmer ist:

i = (x//*y*/z++
, w);

Coda
2005-12-17, 23:14:30
Naja. Die meisten C-Compiler fressen heute auch stillschweigend die C++-Style-Comments ;)

Der besonderst Kluge
2005-12-18, 00:16:45
Naja. Die meisten C-Compiler fressen heute auch stillschweigend die C++-Style-Comments ;)

Der besonderst Kluge sagt,...

dass du wohl irgendetwas verpasst hast denn das ist schon seit mehr als 6 Jahren im Standard festgeschrieben und nicht irgendeine Willkür.

Coda
2005-12-18, 01:11:01
Deshalb ja auch die "meisten Compiler". Es gibt ja auch noch ältere :P

Trap
2005-12-18, 01:59:53
C99 ersetzt C89 nicht zwangsläufig. In einigen Compilern kann man auch einschalten, dass sie sich genau C89 konform verhalten sollen.

MeLLe
2005-12-18, 14:57:20
Der besonderst Kluge sagt,...
Der Melle sagt, dass Pisa auch vor klugen Leuten nicht Halt macht.
Oder ist "besonderst" der Vorname? :|

Der besonderst Kluge
2005-12-18, 15:10:43
Der Melle sagt, dass Pisa auch vor klugen Leuten nicht Halt macht.
Oder ist "besonderst" der Vorname? :|

Der besonderst Kluge sagt,

dass du wohl nicht geblickt hast, dass ich das absichtlich so auffällig mache.
Aber mach dir nichts draus *lol*

MeLLe
2005-12-19, 13:24:04
Der besonderst Kluge sagt,
dass du wohl nicht geblickt hast, dass ich das absichtlich so auffällig mache.
Aber mach dir nichts draus *lol*
Man kann einem Troll solchen Weitsinn nicht im Vorhinein uneingeschränkt zutrauen.

Gast
2005-12-21, 15:19:16
Warum habt ihr meinen Thread so zugemüllt?

Der besonderst Kluge
2005-12-21, 15:27:13
#include <stdio.h>
int
main()
{
int C=42;
if (C==C++) printf("Bork!\n");
else printf("Gnarf!\n");
return(0);
}

Der besonderst Kluge weiß, dass...

das C ist und in C++ nicht so geht...

Coda
2005-12-21, 16:43:20
Wer sagt dass das C++ sein sollte?

zeckensack
2005-12-21, 18:09:45
Der besonderst Kluge weiß, dass...

das C ist und in C++ nicht so geht...Er weiß nicht, sondern er glaubt. Und er irrt.

Coda
2005-12-21, 18:36:23
Stimmt eigentlich, wieso sollte es auch nicht gehen X-D

Bringt mich ganz durcheinander der Typ.

Der besonderst Kluge
2005-12-21, 20:23:18
Der besonderst Kluge...

Ja tut mir leid aber den Header "stdio.h" gibt es im C++ Standard nicht ;]

Trap
2005-12-21, 20:59:14
Der C++ Standard enthält den C89 Standard und damit gibt es <stdio.h> (außer es wird später explizit gesagt, dass der header nicht enthalten sein soll und das glaub ich nicht)

Coda
2005-12-21, 21:14:58
Ja tut mir leid aber den Header "stdio.h" gibt es im C++ Standard nicht ;]Doch gibt es.

D.5 Standard C library headers [depr.c.headers]
For compatibility with the Standard C library, the C++ Standard library provides the 18 C headers, as shown in Table 100:

Table 100 — C Headers
<assert.h> <iso646.h> <setjmp.h> <stdio.h> <wchar.h>
<ctype.h> <limits.h> <signal.h> <stdlib.h> <wctype.h>
<errno.h> <locale.h> <stdarg.h> <string.h>
<float.h> <math.h> <stddef.h> <time.h>Soviel dazu. Darüber hinaus gibt es noch jeweils die cheader statt header.h Version davon

Der C++ Standard enthält den C89 Standard Nein.

Der besonderst Kluge
2005-12-21, 21:35:45
Oh stimmt, die sind ja wirklich noch da :o - Hab ich nicht gewusst. Man sollte sie ja nicht mehr benutzen, denn nun gibts die neuen Header mit <c...> - Die meistens jedoch nur ne Art Wrapper bereitstellen a la
#ifndef ...
#define ...

namsepace std {
#include <alter-c-header.h>
}

#endif

:]

Coda
2005-12-21, 21:39:12
Nein auch das nicht. Die Header verhalten sich exakt gleich, nur die Symbole darin sind dann auch im std-Namespace verfügbar.

D.h. nach <cstdio> sind sowohl printf als auch std::printf definiert.

Imperator Katarn
2005-12-22, 12:37:01
warum bestehen C++ programmierer immer so wehement darauf?es sind wohl weniger die C++ Programmierer als eher die C-Programmierer. Ich schätze, die wollen C halt nicht als "kleinen Bruder" von C++ verstanden wissen und distanzieren sich deswegen so weit es geht von C++.
Das kann man auch in den beiden von mir genannten NGs recht gut sehen: wie gesagt scheißen sich die Leute in beiden Groups immer ganz furchtbar ein wenn es um C vs. C++ geht, allerdings mit dem Unterschied daß die in der C-NG noch am extremsten sind. In der C++ Group lassen die sich zumindest noch dazu herab, C als Schmalspur-C++ (gewissermaßen als (C++)--) hinzunehmen.

Coda
2005-12-22, 14:19:10
Das ist doch sowieso unglaublich kindisch :D