Kryptische Parameter in main(...)
-
Ich beginne gerade damit mir C++ beizubringen. Bis jetzt habe ich keine gravierenden Probleme, da ich mehrere Bücher besitze und die meisten Fragen selbst beantworte. Doch ist mir eine immer noch ungelöst.
Es handelt sich um Parameter in der main-Funktion, die mir als Neuling einfach nicht klar werden wollen.
In einem Buch wird der Programmaufbau einfach durch:#include <iostream.h> int main() { ... }
angegeben und alles erklärt sich von selbst. Jedoch arbeite ich im Moment mit einem anderen Buch und dort wird der grundlegende Programmaufbau so dargestellt:
#include <stdio.h> #include <iostream.h> int main(int nNumberofArgs, char* pzArgs[]) { ... }
An diesem Beispiel verstehe ich die Parameter der Funktion main nicht.
Warum sind sie hinzugefügt worden und was bewirken sie?
-
solltest du zuföllig den MS VC Compiler benutzen ruf dort einfach dei Hilfe auf.
Borland sollte auch gehen.Sonst schau in einem besseren Einsteigerbuch nach.
Auf jeden Fall beide Formen sind richtig.Die Form mit den Parametern ermöglicht es dir auf die Argumente der Kommandozeile zuzugreifen.
Falls das ausreicht, sag Bescheid.
-
Beide Möglichkeiten sind möglich (das hast Du aber auch so herausgefunden ;))
Bei der 2. kannst Du noch die dem Programm übergebene Parameter ansprechen.
der int-Wert gibt die Anzahl der Parameter an, und der char** die Parameter.Ein Beispiel, in dem Du alle Parameter ausgeben kannst:
#include <iostream.h> int main(int nNumberofArgs, char* pzArgs[]) { for (int i=0; i < nNumberofArgs; ++i){ cout << "[" << i << "]:" << pzArgs[i] << endl; } // Damit die Ausgabe nicht sofort verschwindet char c; cin >> c; return 0; }
Was das Beispiel macht musst Du dir selbst erarbeiten, ist zuviel Arbeit für mich um diese Uhrzeit
-
Nun gut, was ich bis jetzt herausgefunden habe ist, dass nur ein Argument existiert, welches genauer den Namen der Datei inkl. des Zielordners angibt.
Ich habe deinen Code ausprobiert und selber mal etwas rumprobiert und es kam zum selben Ergebnis: 1 Argument und Pfadangabe der Datei.So wirklich verstehen tu ich es noch nicht, aber wenn ich Glück hab, wird es noch irgendwo im Buch aufgelöst. Aber dennoch, Danke.
-
was bIce meinte war glaub ich das du, angenommen dein Programm heist "test.exe" dem programm beim Aufruf Parameter in der Kommandozeile mit übergeben kannst.... also : "test.exe test.doc"
So hast du die Möglichkeit einem Kommandozeilenprogramm direkt bei Start einen Parameter in diesem Fall einen Dateinamen zu übergeben.Der int Wert steht dann für die Anzahl der Argumente und der zweite für eine Referenz auf den ersten Speicherbereich eines Feldes mit Char-Elementen.
-
wie alt sind deine buecher? iostream.h gibt es nicht mehr. zumindest nicht im standard.
-
iostream.h gibt es nicht mehr. zumindest nicht im standard
Lustige Aussage
Denn:
A) Laut Standard gab es <iostream.h> nie. Die Prä-Standard-Streams waren nie standardisiert. Das "mehr" ist also zuviel.
Schaut man in die reale Welt (die ohne Standard), dann ist <iostream.h> nach wie vor kompatibler als <iostream>. Das wird sich zwar mit der Zeit angleichen, die Aussage aber, dass <iostream.h> nicht mehr existiert ist zweifelsohne falsch.
Nichts desto trotz unterstütze ich natürlich ebenfalls die Initiaive: "Schwimm im Standardstream. Inkludiere <iostream>"
-
lowman schrieb:
#include <iostream.h> int main() { ... }
#include <stdio.h> #include <iostream.h> int main(int nNumberofArgs, char* pzArgs[]) { ... }
es sind beide Beispiele(ISO C++ mäßig) falsch
es heißt nähmlich nicht iostream.h sonder iostream
using namespace std;und stdio.h gibts in C++ auch nicht, das heißt cstdio
-
und stdio.h gibts in C++ auch nicht
Sicher. Die C-Header sind laut C++ Standard zwar "deprecated", geben tut's sie aber noch.
Mal da von ab: Das Mischen von C++- (<iostream>) und C I/O (<stdio.h>) ist in den meisten Fällen käse und sollte nur gemacht werden, wenn man es wirklich braucht und wenn man die Konsequenzen kennt.
-
hi
was währen den die Konsequenzen wenn ich mal so ganz dumm fragen darf????
Gehen wie mal davon was iostream ist nicht Standard. Was soll man statt dessen benutzen um den Standard zu erfüllen????
-
Gehen wie mal davon was iostream ist nicht Standard. Was soll man statt dessen benutzen um den Standard zu erfüllen???
Hä? Sicher ist <iostream> Standard. Mehr geht nicht mehr. Also: <iostream> inklduieren und lustig mit cout, cin und konsorten rumhantieren.
was währen den die Konsequenzen wenn ich mal so ganz dumm fragen darf????
Du musst sicherstellen, dass C und C++ I/O synchronisiert sind, sync_with_stdio als niemals mit false aufgerufen wurde.
Die Synchronisation kostet aber natürlich etwas Zeit.
-
wobei wenn du <iostream> inkludierst deine exe um einiges größer wird als mit <iostream.h> - jedenfalls bei msvc++ 6.
standard? pfff!
-
no_skill schrieb:
wobei wenn du <iostream> inkludierst deine exe um einiges größer wird als mit <iostream.h> - jedenfalls bei msvc++ 6.
*g*
schon mal das programm dann auf einen anderen compiler protiert? oder gar eine andere platform.btw:
um wieviel wird das programm denn groesser?
100KB?ts, das ist egal - denn bedenke, dafuer sind die neuen IOStreams wesentlich performanter.
schon mal die STLPort IOStreams getestet? die sind auch gross, aber pfeilschnell.
nonstandard?
pfff!
-
554 zu 284.
ich habs noch nicht unter anderen kompielern probiert, aber ich kann ja g++ anwerfen, wenn ich heimkomm.
-
auf meinem VC++7 sind es ca. 120 KB
das ist sowas von egal.
das wird einmal geladen und dann ists gut - die runtime ist das wichtigerebtw: dieser 'overhead' ist konstant, dh auch bei einem 10MB programm sind es nur 120KB
ausserdem werden die compiler da immer besser...
-
hm... bei einer 200 kb exe macht ein overhead von 170 kb aber schon was aus!
aber im endeffekt hast du recht - es ist egal!
-
no_skill schrieb:
hm... bei einer 200 kb exe macht ein overhead von 170 kb aber schon was aus!
aber im endeffekt hast du recht - es ist egal!dann linke dir C++ library doch dynamisch - und schon ist alles weg
-
leider weiß ich nicht wie das geht...
-
leider weiß ich nicht wie das geht...
Ach du grüne Neune. Da wirst du wohl tatsächlich mal in dein Compiler-Handbuch schauen müssen
-
no_skill schrieb:
leider weiß ich nicht wie das geht...
schonmal was von der Hilfe deines Compilers gehört ?....