PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unterschied C, C#, C++, kompatibilität



Superhirn
15.03.2006, 18:53
Hi,
was ist der Unterschied zwischen C, C#, und C++? ich will jetzt mit OpenCV anfangen und öchte auch gleich dazufragen wie weit die Sprachen untereinander kompatibel sind, denn ich kann nur C und als erstes las ich in der ppt vom opencv, dass ich da visual c++ brauch.

Danke
Thomas Grübler

ich hab auch schon was von CC+ gehört, glaub aber nicht das es das gibt.

Blackbird
16.03.2006, 07:05
Ist die Frage nur rein akademisch oder hast Du ein bestimmtes Projekt im Auge oder willst Du Dich langfristig in eine bestimmte Richtung entwickeln?
Die Unterschiede sind nämlich nicht mit einem Satz erklärbar und erfordern auch eine einigermaßen gute Sachkenntnis. Alleine schon deswegen, weil viele Fachbegriffe nur noch als Synonym einer kompletten Technologie verwendet werden.
Mit einer Aufzählung der Unterschiede wäre Dir also nicht geholfen, wein viele Begriffe noch einer Extra-Aufzählung (-Erklärung) bedürfen.

Vielleicht hilft das weiter : http://www.c-plusplus.de/cms/ und http://www.c-plusplus.de/forum/

Blackbird

Superhirn
16.03.2006, 12:06
es reicht eine ungefähre erklärung. ich hab mir ein buch über c++ ausebort. hier soll man schon c können, und dann wird größtenteils beschrieben, dass ich bei c++ das oder das weglassen darf...

UlrichC
16.03.2006, 17:04
Die Sprachen C++ und C# sind von der Notation her sehr ähnlich.
C++ ist als Erweiterung von C zu verstehen.
Die Kompartibilität untereinander ist gewährleistet...
Im C++ Kompiler kann man Cund dessen Bytecode bis zu ASM verarbeiten.
Die Entwicklungsumgebung von C# ist als Erneuerung von der MC-VC++ 6 kompartibel zu C++, C und ASM.
Die MS VC++ 7 (alias .NET) Entwicklungsumgebung ist also zum Programmieren in C++ etc. geeignet.

Wer im Ernst mit "C# oder ähnlich" "Open" programmieren will, hat eine Kleinigkeit nicht verstanden.
In der .NET Umgebung ist das Kompilieren von OpenSource verboten :-)
Zudem ist die Intension von GNU nicht ... dass man für ein paar Sourcen gleich das Visual Studio kaufen muss.

Gruß,
Chris

Superhirn
16.03.2006, 17:12
Danke. habs so halbwegs verstanden. dann kann ich immer bei C bleiben und alles anderen damit proggen.

UlrichC
16.03.2006, 17:27
Danke. habs so halbwegs verstanden. dann kann ich immer bei C bleiben und alles anderen damit proggen.

Öhmm was meinst Du damit?
1. Mit C geht nicht alles.
2. Mit C++ geht nicht alles.
3. Mit C# geht auch nicht alles.
4. Mit C++ geht viel
5. Mit C geht manches
...kommt ganz darauf an.

Was willst Du denn schreiben?

Superhirn
16.03.2006, 17:36
C und C++ ist kompatibel und ich brauchs eh nur für den AVR und openCV, denn da wird immer nur von C++ geredet.

Warum gibs eigendlich nicht _1_ C??? nDa wird man ja verrückt, wenn man alle diese sprachen kennen muss. man brauch nur unter google nach programmiersprachen suchen und schon kennt man 20neue (oder mehr)

UlrichC
16.03.2006, 20:00
Hardware
011011101
ASM
C
C++
= Grundsprachen
----------------------------------------------------------
Andere Sprachen sind meist aufgesetzt um Features die die anderen Sparchen nicht haben zu bieten.
Wie beispielsweise
Verständlichkeit
Plattformunabhängigkeit
Kombartibilität
usw.
....
Als Maschinencoder kann man bei den Grundsprachen bleiben.

Gruß,
Chris

darwin.nuernberg
16.03.2006, 20:10
Vielleicht sollte man noch anmerken:
C++ oder C# (eigentlich das gleiche) sind objektorientierte Sparachen.
Das ist für einen AVR etwas "abgehoben".

Das ANSI C oder auch "normale" C oder was es da sonst noch gibt (GNU) reicht für einen AVR mehr als aus.


Klar prinzipiell geht C++/C# auch, letztendlich zählt was am ende als compilat heraus kommt.


Ich persönlich bin mir (mittlerweile) zu bequem für C geworden (mangelnde Praxis),
gerade weil es ja auch noch andere Alternativen gibt, welche einem Viel Denken abnehmen, die freien (Hirn) Recourchen kann man dann für was anderes nehmen.

Aber ich will Dich um keinen Preis von Deiner Wahl abbringen.

Superhirn
17.03.2006, 14:35
Danke. ich blaib also bei C und später C++. So rießen projekte mach ich ja noch nicht.

ExtreamCoder
20.03.2006, 19:13
Es sei auch noch erwähnt das c# eine Recht neue Sprache ist und nur unter Windows funktioniert. Wer allerdings schnell ne gui programmieren will hat damit große Vorteile

lorcan
20.03.2006, 19:46
Und das man auch mit C objektorientiert programmieren kann.

Superhirn
22.03.2006, 17:04
Was heißt objektorientiert?

ExtreamCoder
25.03.2006, 21:35
Mit C kann sicher nicht objektorientiert programmiert werden.
Der Unterschied von C zu C++ war doch haupsächlich die Einführung der objektorientierung, dass heißt es gibt Klassen.
In C gibt es zwar structs die sollten aber nicht mit class verwechselt werden

Superhirn
26.03.2006, 11:10
Danke. ich hab mittlerweile alles kapiert.

pc-gott70
06.04.2006, 19:06
Hallo Superhirn,

ich bin mit C und den nachfolgenden Varianten groß geworden.
Ich will hier einfach mal den Unterschied von C und C++ an einem anschaulichen Beispiel verdeutlichen,- mit den Begriffen prozedurale bzw. objektorientierte Programmierung können ja einige nichts anfangen.
Also:
nehmen wir einmal an, wir wollen ein Haus bauen. Wenn wir dies mit der Programmiersprache C (der prozeduralen bzw. funktionalen Programmierung) verwirklichen wollten, sähen die einzelnen Schritte, die die Prozeduren darstellen, folgendermaßen aus:
1.) Grube ausheben
2.) Keller aufmauern
3.) Hausrohbau erstellen
4.) Dachstuhl errichten und decken
5.) Innenausbau
6.) usw.

Bei der Programmiersprache C++ (der objektorientierten Sprache) würde uns diese Struktur nicht mehr interessieren und wir könnten folgendes programmieren:
1.) das Haus besteht aus. Keller, Erdgeschoß, erstes Obergeschoß, Dachboden, Dach
2.) der Keller besteht aus: Betonboden, Wand und Fenster
3.) fertig

Wie Du siehst, geht man bei C von einer genauen Beschreibung und bei C++ von den Beziehungen der einzelnen Elemente zueinander aus.


Grüße David

Superhirn
06.04.2006, 19:40
Danke,
Gutes beispiel. jetzt kapier ichs mit dem objektorientiert auch mal, denn ich konnte mir noch keinen vorteil ausdenken.

Grüße
Thomas

SprinterSB
06.04.2006, 23:06
Warum gibs eigendlich nicht _1_ C???

Warum gibt es nicht _1_ Automarke?
Warum gibt es nicht _1_ Bananensorte?
Warum gibt es nicht _1_ µC für alles?
Warum gibt es nicht _1_ Internet?

Superhirn
07.04.2006, 15:33
Da die Leute die Automarken, bananen,.... verkaufen damit viel geld machen. Und C kostet ja nix. Also könnte man ja sicher eine standartprogsprache für alle entwickeln. Es gibt ja soooo viele programmiersprachen auf dieser welt, oder?

johannuhrmann
07.04.2006, 20:35
Was heißt objektorientiert?

Hi,

es gibt 500-Seiten-Bücher, die diese Frage zu beantworten versuchen. Ich versuch es jetzt mal vereinfacht in ein paar Sätzen ;)

Dazu vielleicht erstmal, was nicht objektorientiert ist:
Bei nicht objektorientierten (sprich: prozeduralem) Programmieren hast Du im
wesentlichen zwei Dinge: Daten und Funktionen
Die Funktionen rufen sich gegenseitig auf und übergeben sich dabei Daten.
Daneben gibt es noch globale Variablen, auf die immer zugegriffen werden darf.
Einfach gesagt: die Variable weiß was, die Funktion kann was


Das gibt vor allem bei großen Projekten ein Problem: Wie komme ich in dem Wald von tausenden Funktionen noch zurecht? und Welche Daten oder Teile einer Datenstruktur darf ich zwischen zwei Funktionsaufrufen ändern und welche sollten nur durch spezielle Funktionen geändert werden? oder auch Mit welchen Funktionen kann ich welche Datenstrukturen bearbeiten?

Die Lösung dafür ist objektorientiertes Programmieren:
Zusammengehörige Funktionen werden mit den Daten, die sie haben müssen,
zu einer Klasse zusammengefasst. Eine Klasse ist also eine Datenstruktur und
zugleich die Funktionen, um mit ihr zu arbeiten.
So, wie man aus einer Struktur beliebig viele Variablen erzeugen kann, kann man
aus der Klasse Objekte erzeugen.
oder kurz: das Objekt weiß etwas (hochtrabend: "es hat einen internen Zustand") und es kann etwas

Lange Rede, kaum ein Sinn:
Für Mikrocontroller ist C die bessere Wahl (denn da hast Du nicht hunderte von
Funktionen). Und wenn Du dann doch C++ lernen willst, dann musst Du eh C als
Grundwissen können - insofern ist dann auch die Zeit für's Lernen nicht vergeudet.

Superhirn
08.04.2006, 07:48
Danke. Die erklärungen werden immer besser.

Aber ich geh wetten mein letztes programm hatte min. 20 funktionen. die hälfte jedoch ungenützt. Bestand großteils aus den fahrroutinen usw.

Grüße
Thomas

zefram
08.04.2006, 07:56
Hallo,

kleine Anmerkung zur Diskussion: Bitte nicht den Begriff "funktionale Programmierung" falsch verwenden. Funktionale Programmierung ist ein völlig eigenständiges Programmierkonzept (funktionale Sprachen sind zum Beispiel Haskell, Lisp, Scheme).

Das Gegenteil von objektorientiert ist prozedural, nicht funktional.

Neben den funktionalen Sprachen gibt es die große Gruppe der imperativen Sprachen, zu denen C, C++, Pascal, Basic usw. zu zählen sind. Weiterhin unterscheidet man noch deklarative Sprachen, wie zum Beispiel Prolog.

Superhirn
08.04.2006, 07:58
Das Gegenteil von objektorientiert ist prozedural, nicht funktional.
Die Prozeduren werden in C jedoch Funktionen benannt, soviel ich das mitgekriegt hab. oder?

zefram
08.04.2006, 08:12
Ja richtig, allerdings hat das damit nichts zu tun. Die Namensgebung ist sicher etwas verwirrend.

Kleine Erklärung: Bei imperativen Sprachen (C, C++, Pascal und alles was du sicher sonst so kennst) schreibt man genau auf, was die CPU tun soll. Man gibt ihr Befehle (daher der Name imperativ, kommt aus dem Latein). Die CPU arbeitet dann genau die Befehle ab, die der Programmierer vorgegeben hat.

Nicht so bei den funktionalen SPrachen wie Haskell. Hier definiere ich das zu lösende Problem als mathematische Funktion (daher der Name). Im Hintergrund kümmert sich jetzt eine Art Interpreter darum, aus meiner mathematischen Anweisung Befehle für die CPU zu erzeugen. Aber ich als Programmierer muß mir darum keine Gedanken machen, ich definiere nur mein mathematisches Problem.

Zur verdeutlichung der Quicksort-Algorithmus in Haskell:



qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)


Ein einfacher Zweizeiler. Die erste Zeile sagt nur: Wird Quicksort auf eine leere Liste [] angewendet, ist das Ergebnis eine leere Liste.
Zweite Zeile: Wird Quicksort auf eine Liste von mehreren Zahlen angewendet, von denen die erste x heißt und alle weiteren mit xs bezeichnet werden, dann ist das Ergebnis eine Liste von Zahlen, die so aufgebaut ist:
Links steht das Ergebnis von Quicksort angewendet auf alle Zahlen aus xs, die kleiner sind als x, in der Mitte steht x selbst, rechts steht das Ergebnis von Quicksort angewendet auf alle Zahlen größer als x.
Damit ist der Sortieralgorithmus Quicksort mathematisch exakt definiert. Wie die CPU das jetzt intern ausrechnet, ist mir völlig egal.

In C/C++ oder jeder anderen imperativen Sprache müsste man genau mittels Schleifen, if-Abfragen usw. der CPU sagen, was zu tun ist.

Superhirn
08.04.2006, 10:37
Danke. das schaut ja praktisch aus. jedoch entsteht da sicher ein riesiges compileroutput. doch für komplexe sachen auf jeden fall das beste denn für dieses beispiel hätt ich in c lang gebraucht.

Grüße
Superhirn

johannuhrmann
08.04.2006, 15:47
Hallo,
kleine Anmerkung zur Diskussion: Bitte nicht den Begriff "funktionale Programmierung" falsch verwenden. ..


und das ausgerechnet mir! Asche auf mein Haupt...

Hab's korrigiert

ExtreamCoder
20.04.2006, 21:06
Wenn ihr Anwendungssoftware schreiben wollt benutzt Java, dass ist am elegantesten...

BiGF00T
20.04.2006, 21:09
Wenn ihr Anwendungssoftware schreiben wollt benutzt Java, dass ist am elegantesten...
Java is fast dasselbe wie C# *duck*
Delphi is auch ned übel wenns um schnell was schönes erstellen geht...


Danke. habs so halbwegs verstanden. dann kann ich immer bei C bleiben und alles anderen damit proggen.
Yo, kann nicht schaden... Wenn man erstmal mit OO angefangen hat, lernt man es zu schätzen aber es gibt eigentlich kaum was, das man nicht auch mit reinem C lösen kann. Es wird nur manchmal unübersichtlicher...
Das meiste an Prgrammiersprachen ist subjektiv (ob man mit dem Stil zurechtkommt, ob man irgendwo gelesen hat, dass sie schlecht is (BASIC) usw...). Für die meisten Sachen kann man alle nehmen. Trotzdem gibts immer Glaubenskriege drüber. Bin erstaunt, dass es dazu hier noch nicht kam :) Das spricht für das Niveau hier.
Mit C kann man auf alle Fälle mal nix falsch machen.

Superhirn
20.04.2006, 21:32
Trotzdem gibts immer Glaubenskriege drüber. Bin erstaunt, dass es dazu hier noch nicht kam. Das spricht für das Niveau hier.
Mit C kann man auf alle Fälle mal nix falsch machen.
Hi,

ich könnte ja mal sowas beginnen im Umfragenforum :twisted: .
-------------------
und danke für die vielen antworten. ich glaub das wird ein thema, dass auf ewig aktuell sein wird :-)

BiGF00T
20.04.2006, 21:34
ich könnte ja mal sowas beginnen im Umfragenforum :twisted: .


Ja, am besten so ne Formulierung wie "Ist C schneller als C++?" oder sowas ähnliches ;) Vielleicht noch Linux und Microsoft in einem Satz verwenden und dann schnell ducken und/oder wegrennen ;P

ExtreamCoder
21.04.2006, 20:28
dann beginn ich mal....

Java ist am Besten...

Es ist völlig absurt zu behaupten die beste Programmiersprache sei dies oder das... es kommt auf den Zweck an und wie geübt man ist.
Jedoch ist C# eine Nachahmung von Java kann nur in sachen web und portablität nicht mithalten ist nicht gratis. Trotzdem eine tolle Sprache wenn man unter Windows bleibt und Geld keine Frage ist.
Natürlich in Sachen Systemprogrammierung kann Java nicht mithalten.
Ein wahrer Programmierer kann ohnehin viele Sprachen und eigentlich sind die objektorientierten Sprachen von der Syntax alle ähnlich.

Superhirn
21.04.2006, 20:58
ich denke, C# heißt deswegen C#, weil Microsoft keine Lizenzkosten zahlen will. vermutlich. ich kenn mich da nicht sogenau aus.
auf jeden fall hab ich gelesen, dass javascript und jscript das selbe ist, nur jscript von microsoft ist denn microsoft wollte keine lizenzkosten zahlen.

NumberFive
22.04.2006, 07:36
Nun will ich auch mal eine Kommentar bei steuern.

Ich bin auch der Meinung das es nicht die Programiersprache gibt. Es gibt ein Paar dinge die man einfach bedenken muß aber dann ist es fast egal bei der leistungs fähigkeit der machinen.

Umso nähe am kern der Machine umso mehr Probs bei potieren und ich muß an mehr denken. Thema Speicher verwaltung zum Beispiel.

Ich perönlich mache viel mit Delphi und C++ von MS in C++ die Routinen für die Machine in delphi die Oberfläche dazu damit ich die schnell zusammen klicken kann.

Anmerkung zu Java und C#:
Immer dran denken das die Garbage Collection sehr rechnen intensiv sein kann. Kenne einigeleute bei den die Software immer sehr schnell war aber beim längeren betrieb irgendwan ein pause ein gelegt hat.

Ich weiß das ich durch programmiert tricks das dann wieder relativieren kann aber wenn ich mich doch drum kümmern muß warum gibt es sie dann ?

Nicht erschlagen ist meine Private meinung.

Gruß