![]() |
C++ = C++ ?
Hallo
wollte mir eigentlich C++ ein wenig anschauen mit Visual Studio. Ich habe mir jetzt mehrer Tutorials angesehen aber in allen steht was von
Delphi-Quellcode:
Wenn ich das aber in Visual Studio eintippe will das alles nicht funktionieren.#include <iostream.h> oder cout << "Hello World"; Ich habe jetzt das gefunden was funktioniert :
Delphi-Quellcode:
Was ist jetzt da der unterschied ? Bei beidem steht ja C++ ? :wiejetzt: #include "iostream" using namespace std; printf("Hello World"); MfG |
Re: C++ = C++ ?
bei dem einen wird die Funktion printf aufgerufen bei der anderen wird mit dem "<<" operator gearbeitet.
|
Re: C++ = C++ ?
Zitat:
erstmal kurz zu C-Code, wenn Du das Delphi durch C ersetzt, bekommst Du auch für C das richtige Highlighting :wink: Was Dein Problem angeht, so hast Du hier bekanntschaft mit dem Namensraum gemacht. Die Frage die sich hier stellt ist, welches VS Du verwendest, ab einer bestimmten Version (kenne ich nicht aus dem Kopf) musst Du die Namensräume immer angeben. Also entweder
Code:
oder eben
std::cout << "Hello World";
Code:
Beim Include liegt der wichtige Unterschied darin, wo die Datei liegt, die Du einbinden möchtest. Liegt sie im gleichen Verzeichnis wie Dein Programm, verwendet man die Anführungszeichen. Liegt sie im Suchpfad des Compilers, werden die spitzen Klammern verwendet. Da .h kann/muss man (afaik) auch erst ab einer bestimmten Version weglassen. Zudem musst Du aufpassen, ob Du eine managed C++ Version verwendest (also das .net Pendant), da dürfte es einige Änderungen geben, die von den Standard C++ Tutorials abweichen!
#include "iostream" using namespace std;
// ... cout << "Hello World" Nebenbei um die Frage mal ganz klar zu beantworten C++ != C++ Die sind nicht immer gleich, je nach Compiler wirst Du schnell ein paar (kleine) Unterschiede finden. Das meiste davon betrifft natürlich nicht direkt die Sprache, sondern eher die mitgelieferten/verfügbaren Bibliotheken, die Arbeit mit make-Files usw. Gruß Der Unwissende [add] Ach ja, printf vs. cout, ich glaube printf war die ältere Variante. Jedenfalls steht printf für die Formatierte Ausgabe, hier gibt es ziemlich starke Parallelen zu format von Delphi. Du gibst dabei einen String mit Platzhaltern an und übergibst die Argumente, die an dieser Stelle eingefügt werden sollen:
Code:
[/add]
printf("Dies ist ein String, in den ein String %s und ein Integer %d eingefügt wird", "BLUBB", 10);
// sollte "Dies ist ein String, in den ein String BLUBB und ein Integer 10 eingefügt wird" ausgeben // Das gleiche mit cout hätte wohl die Form cout << "Dies ist ein String, in den ein String" << "BLUBB" << "und ein Integer" << 10 << "eingefügt wird" // bei cout bin ich mir nicht ganz sicher, zu lange nicht mit C++ gearbeitet, also lieber nicht glauben! |
Re: C++ = C++ ?
Gut, Danke.
Ich hab das mit VS 2005 gemacht. In den ganzen Tutorials steht aber das oben erwähnte. Gibts vielleicht auch ein Einführungstutorial dafür ? MfG |
Re: C++ = C++ ?
Zitat:
Wenn Du das berücksichtigst (ist ja nicht so kompliziert, oder?) dann solltest Du den Rest der Tutorials ganz gut verwenden können. Die meisten fangen eben (wie gesagt) bei "Hello World" an und erklären dann nach und nach die Sprache (Datentypen, Kontrollstrukturen, Fehlerbehandlung, Klassen, ...) |
Re: C++ = C++ ?
cout ist C++, printf funktioniert auch unter C.
Natürlich gibt es viele Arten so ein einfachen Programm wie Hello World zu programmieren. Hier sind mal die, die ich für am "normalsten" halte: C++:
Code:
C:
#include <iostream>
using namespace std; int main() { cout<<"Hello World!"<<endl; return 0; }
Code:
#include <stdio.h>
int main() { printf("Hello World!"); return 0; } |
Re: C++ = C++ ?
Hallo,
Zitat:
Zum Suchen einfach einmal Google bemühen. Gruß Jörg |
Re: C++ = C++ ?
Wieso wird hier mit Kanonen auf Spatzen geschossen? printf() ist zum formatierten Ausgeben von Werten in einem String. Wenn es hier um die reine Stringausgabe geht, dann muss man doch nicht gleich mit dem grossen Holzhammer kommen (wobei hier nichtmal eine Variable ausgegeben wird) sondern nutzt lieber eine einfachere - bessere geeignete Funktion (z.B. puts()).
|
Re: C++ = C++ ?
Zitat:
Code:
Dasselbe unter VSC++ funktioniert nicht, da in der 2. for-Schleife das i bereits definiert ist.
for (int i=1; i<10; i++) {
....} for (int i=2; i<100; i++) { .... } So war es zumindest, als ich noch C++ Code schreiben durfte........ |
Re: C++ = C++ ?
sowas macht man ja auch nicht (eine Variable 2 mal declarieren). Selbst wenn der Compiler das unterstützt sollte man sich das gar nicht erst angewöhnen, schließlich entbehrt das jeder logic.
|
Re: C++ = C++ ?
Andererseits endet der Scope der Variablen i eigentlich am Ende der Schleife
|
Re: C++ = C++ ?
Zitat:
Ich persönlich finde das eigentlich sogar gut: dadurch das der Typ der Variablen in dem Block steht, ist sofort erkennbar was da passieren soll. Und wie mkinzler schon gesagt hat: normalerweise ist der Geltungsbereich der Variablen nach der Schleife zu Ende. Nur dass, da Microsoft mal wieder andere Vorstellung hat. |
Re: C++ = C++ ?
Zitat:
Ebendieser ist übrigens auch daran schuld, daß z.B. #include <iostream.h> nicht mehr funktioniert. Es heißt <iostream> ! Zitat:
@Muetze1: Sogar Kernighan und Ritchie benutzen printf() und nicht puts() für ihr Hello World. Vermutlich zugunsten der Konsistenz ;) Zitat:
Das ist C++, nicht Delphi oder C. In C++ findet, da u.a. im Gegensatz zu den anderen gängigen objektorientierten Sprachen wie Delphi Stackobjekte eine große Rolle spielen, zumeist RAII (Resource Acquisition Is Initialisation) Anwendung. |
Re: C++ = C++ ?
Zitat:
|
Re: C++ = C++ ?
häääääääääääääääääääääääääääääääääääääää
:shock: :kotz: |
Re: C++ = C++ ?
Hallo delphilover,
bitte stelle doch konkrete Fragen, was du an den Posts über dir nicht verstehst. Ein solches gespamme wird in Foren allgemein nicht gern gesehen. |
Re: C++ = C++ ?
Falls ich noch ne kurze Frage stellen darf:
Wenn ich jetzt ein neues win32 Project mache erstellt es ja automatisch eine Form die aber irgendwie nicht richtig da ist ? Ich kann dann noch eine Neue hinzufügen und mit der geht alles wunderbar wie in Delphi. Mache ich was falsch? oder wo kann ich umstellen welches die Form ist die beim Programmstart angezeigt wird. MfG |
Re: C++ = C++ ?
Hallo,
unter Visual C++ 2005 gibt's keine Headerdatei iostream.h mehr! Wie man alternativ cout oder cin nutzt weiss ich auch nicht. Grüsse Rainer |
Re: C++ = C++ ?
Zitat:
Ich mache das immer so. |
Re: C++ = C++ ?
Zitat:
Code:
Dieser Code bewirkt, dass ein 4 Byte großer Speicherplatz reserviert und mit 0 initialisiert wird. Dann wird i schrittweise bis auf 10 erhöht. Schließlich wird der Speicherplatz wieder freigegeben.
for(int i = 0; i < 10; i++);
In C++ ist sogar folgendes möglich:
Code:
for(int i = 0; i < 10; i++) {
for(int i = 0; i < 10; i++) { // Mach was! } } |
Re: C++ = C++ ?
Zitat:
|
Re: C++ = C++ ?
Zitat:
Zumal es auch nicht sehr günstig ist, eine Variable in einer Schleife zu deklarieren. Besser wäre deshalb:
Code:
for(int i,k = 0; i < 10; i++) {
for(k = 0; k < 10; k++) { // Mach was... } } |
Re: C++ = C++ ?
Zitat:
Mal abgesehen davon, dass i ein eher unglücklicher Name für eine Schleifenvariable ist (spätestens bei verschachtelten Schleifen) gehört so eine Fehlerquelle definitiv nicht in Code gegossen. Aber die Sprache erlaubt sie, ja, was in so einem offensichtlichen Fall eher schlecht ist, aber an vielen anderen Stellen hilfreich, denn davon abgesehen ist es in C++ gängig, Variablen erst zu deklarieren (und damit gegebenenfalls zu initialisieren), wenn sie wirklich benötigt werden. Die for-Schleifenvariable ist ein schönes Beispiel dafür. Was juckt mich außerhalb der Schleife das i? Die meisten Sprachen, die die Deklaration außerhalb fordern, garantieren trotzdem nicht einen bestimmten Wert für die Variable, wenn die Schleife verlassen wird. @Rainer: Wie DMW schon sagte: es gibt im C++-Standard überhaupt keinen Header <iostream.h>. Der Name des Headers ist standardkonform <iostream>. Ebenso, wie z.B. die stdio von C in C++ nicht als <stdio.h>, sondern als <cstdio> eingebunden wird. Also macht VC++ das richtig. <iostream.h> gab es nur in der Übergangszeit, in der der Standard noch nicht so weit war. Zu dem Zeitpunkt war der Unterschied (laut Standard), dass die Standardbibliothek bei <iostream.h> global ist, bei <iostream> hingegen im Namespace std liegt. |
Re: C++ = C++ ?
Zitat:
Aber 2 gleiche Variablennamen in einer Funktion sind schon unter aller Sau. Zwar hat der innerste Block immer Priorität, aber eben wie du schon sagtest, Zugriff auf die Variable des äußeren Blocks ist dann unmöglich. Zudem ist es extremst unleserlich... Zitat:
greetz Mike |
Re: C++ = C++ ?
Zitat:
|
Re: C++ = C++ ?
Wenn ihr schon C++ schreibt, dann würde ich nicht die Variablen i anlegen lassen (Constructor) um dann wieder eine Wertzuweisung zu machen. Von daher, wenn es denn C++ sein soll, würde ich immer folgendes vorziehen:
Code:
(int i(0); i < 10; i++);
|
Re: C++ = C++ ?
Zitat:
Code:
ist identisch mit
int i = 0;
Code:
.
int i(0);
Welche Schreibweise besser lesbar ist, ist vermutlich offensichtlich. Das erste ist zudem keine Zuweisung, sondern eine Initialisierung, das ist in C++ ein erheblicher Unterschied. |
Re: C++ = C++ ?
Zitat:
Code:
zwei mal einen Constructor von int aufrufen: einmal den von i und einmal ein temporäres Objekt mit 0. Danach weist er das temporäre Objekt i zu und gibt das temporäre Objekt frei.
int i = 0;
Mit
Code:
aber wird direkt der Constructor von i aufgerufen i und somit gibt es nur einen Constructor Aufruf und kein temporäres Objekt.
int i(0);
/EDIT: Die Frage ist eher: Wie gut ist dein C++ Compiler, als dass er im ersten Falle das temporäre Objekt wegoptimiert. Vom reinen Sprachsatz/-standard her, läuft es im ersten Falle wie beschrieben ab. |
Re: C++ = C++ ?
Nein, das stimmt nicht. Und selbst wenn der Standard es vorschreiben würde, würde jeder Compiler es wegoptimieren.
Zitat:
Aber es sagt genau das:
Code:
ist keine Zuweisung, sondern eine Initialisierung und damit erfolgt genau ein Konstruktoraufruf.
int i = 0;
Edit: Das Zitat oben stammt aus der Dokumentation zu einem der ![]() |
Re: C++ = C++ ?
Zitat:
Du kannst zwar um der Konsistenz willen Konstruktoren (mittels Placement New) und Destruktoren von POD-Typen aufrufen, jedoch sind solche Aufrufe wirkungslos. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz