Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Terep Mini JLI'ler
Anmeldedatum: 02.05.2008 Beiträge: 18 Wohnort: Hannover Medaillen: Keine
|
Verfasst am: 04.01.2009, 19:47 Titel: exit in g++ (was: "break in g++") |
|
|
Hallo Leute
Ich progge mit dem g++ Compiler. Übertrage ich Quellcode aus einem Buch, kennt g++ nicht das "break". Nach meiner Vermutung wird es bei microsoft in der windows.h hinterlegt sein.
Wer weiß, welche lib ich includen muss, damit ich break mit dem g++ nutzen kann?
Terep |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.01.2009, 20:54 Titel: |
|
|
welches break meinst du? das in while/for-loops oder das in switches oder eine funktion wie __debugbreak()? die ersten beiden beschreiben das keyword break, das ist ein elementares c++-keyword und bestandteil der sprache. Wenn er bei einem solchen break Fehler anzeigt, liegt das garantiert an irgendwelchem Fehlern im umgebenden Code, zeig am besten mal ein paar zeilen vor und nach dem Fehler. Funktionen wie __debugbreak() oder __builtin_trap() sind compilerspezifisch und daher nur in bestimmten Versionen enthalten, aber ist c++-bestand
Gruß DXer |
|
Nach oben |
|
|
gombolo Mini JLI'ler
Anmeldedatum: 25.11.2006 Beiträge: 8
Medaillen: Keine
|
Verfasst am: 05.01.2009, 07:11 Titel: |
|
|
|
|
Nach oben |
|
|
Terep Mini JLI'ler
Anmeldedatum: 02.05.2008 Beiträge: 18 Wohnort: Hannover Medaillen: Keine
|
Verfasst am: 05.01.2009, 20:24 Titel: Was das Programm macht? Ich denke, du kriegst es raus. |
|
|
Sorry, ich meinte exit() und nicht break
Das Listing ist für mich ein Kleinod und kommt aus meinem neuesten Buch. Den Code gibt es in verschiedenen Versionen. Es läuft einwandfrei wenn ich exit() entferne.
Code: |
#include <fstream>
#include <string>
#include <iomanip>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
if (argc != 2) {
cerr << "usage: " << argv[0] << " dateiname" << endl;
exit(1);
}
int l = 0;
string zeile;
ifstream eing(argv[1]);
if (eing) // konnte Datei erfolgreich geöffnet werden
while (getline(eing, zeile))
cout << setw(5) << ++l << " " << zeile << endl; // \n nicht in zeile
}
|
Terep |
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 05.01.2009, 22:08 Titel: |
|
|
Du könntest das exit einfach durch ein
ersetzen.
Wahlweise tippe ich auf ein
Das müsste es unter dem g++ ans laufen kriegen.
Gruß
FH _________________ goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.01.2009, 11:02 Titel: |
|
|
achso du meinst exit ;P
wie FH sagte is exit in <stdlib.h> definiert, allerdings solltest du zum einbinden <cstdlib> benutzen, da das standardkonform ist und keine protabilitätsprobleme aufbringt (auf modernen Platformen gibt es <stdlib.h> als solche nicht mehr!). Außerdem ist exit dort in dem namespace std enthalten: CPP: | #include <cstdlib> // ohne .h und mit c davor
int main()
{
std::exit(0);
} | in der main-funktion sind exit(n) und return n übrigens absolut identisch, ich würde wegen lesbarkeit exit aber bevorzugen wenn ich eine atexit() funktion definiere, d.h. wenn ich dem compiler eine funktion bereitstelle, die nach beendung des programms aufgerufen werden soll. Ansonsten return, weils so schön leuchtet
Gruß DXer |
|
Nach oben |
|
|
fkrauthan Junior JLI'ler
Alter: 33 Anmeldedatum: 10.04.2005 Beiträge: 96 Wohnort: Germering Medaillen: Keine
|
|
Nach oben |
|
|
Terep Mini JLI'ler
Anmeldedatum: 02.05.2008 Beiträge: 18 Wohnort: Hannover Medaillen: Keine
|
Verfasst am: 06.01.2009, 18:15 Titel: Schnelle und gute Antworten |
|
|
mit return (1) klappt es fehlerfrei wie auch mit dem Einbinden von
#include <stdlib.h> bzw. #include <cstdlib>
Unter C wurden die include-Dateien mit der Endung .h verwendet.
Aus Kompatibilitätsgründen hat man die "alten" libs nicht erneuert.
Man soll die Endung .h weglassen und dafür das c an den Anfang setzen
eben aus stdlib.h die cstdlib machen.
Danke für die prompten Erläuterungen.
bis denn
Terep |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 07.01.2009, 15:54 Titel: |
|
|
fkrauthan hat Folgendes geschrieben: | das mit atexit ist total egal ob du da exit oder return her nimmst. Die in atexit Funktion wird auch bei einem Return aufgerufen. | genau deswegen hab ich auch geschrieben das exit(n) und return n übrigens absolut identisch sind und das ich bei atexit nur wegen lesbarkeit exit bevorzugen würde ;P
terep: jep, du kannst übrigens auch return 1 schreiben (ohne die klammer), das ist zwar syntaktisch vollkommen egal, spiegelt aber den C++-Charakter wieder, da die Klammerversion vom Code her meist auf C-Wurzeln hinweißt ;)
Gruß DXer |
|
Nach oben |
|
|
|