Hallo Zusammen, ich habe einige Fragen zu einem "Hallo Welt" Programm. Man kann sich das automatisch aus Visual C++ erstellen lassen: #include "stdafx.h" int main(int argc, char* argv[]) { printf("Hallo Welt!\n"); return 0; } 1. Warum wird als Header nicht der "Standart" <stdio.h> verwendent. Ich habe in die "stdafx.h" reingeschaut. Nur ich verstehe nicht so ganz den Code darin. 2. Warum hat die main() Funktion die Parameter "int argc" und "char* argv[]" und was bedeuten die? Danke für Antworten!
stdafx.h ist eine Include-Datei, die das Buildsystem der Microsoftschen C++-Compiler verwendet, um mit präcompilierten Headerdateien arbeiten zu können. Die helfen bei größeren Projekten die Übersetzungszeit zu reduzieren. Niemand zwingt Dich dazu, diese Datei zu verwenden. Wenn Du allerdings mit einem automatisch erzeugten VC-Projekt arbeitest, solltest Du die Verwendung von präcompilierten Headerdateien abschalten, sonst gibt es erst recht unverständliche Fehlermeldungen. Die Argumente von main sind im C-Standar_d_ festgelegt. Das eine ist die Anzahl der übergebenen Kommandozeilenargumente, das zweite ein Array von Pointern auf die einzelnen Kommandozeilenargumente. Das erste Argument ist i.d.R. der Name des Programmes selbst. Diese Dinge sind in abermilliarden von C-Tutorials beschrieben; Du solltest Dir vielleicht etwas grundlegende Literatur über C durchlesen. Literaturempfehlung: Kernighan&Ritchie, Programmieren in C, zweite Auflage, Hanser Verlag *) Fast kontextfreie Fußnote: Mit der Art des Stehens ("standart") hat das übrigens gar nichts zu tun, aber wer versteht diese Bemerkung schon? 1) hat nichts mit einer Art des Stehens zu tun.
Das ist übrigens ein äußerst schlechtes Beispiel für C++, da printf bekanntlich eine C-Funktion ist (und in C++ meines Wissens nach im namespace std liegt). Diese Funktion darf aber nur aufgerufen werden, wenn man vorher sync_with_stdio() auf die iostreams aufgerufen hat (o.ä.), da sich ansonsten zwei verschiedene Puffer gegenseitig in die Quere kommen könnten. Korrektes "Hello-Word" in C++: #include <iostream> // nicht iostream.h (den gibts nicht) int main() { std::cout << "Hello World!" << std::endl; } return 0 ist in C++ bei main() unnötig (genauso unnötig wie auto vor lokalen Variablen).
Hm, irgendwie geht aus dem Posting des OPs nicht klar hervor, ob er nun C oder C++ programmieren möchte. Haben deine Dateien die Endung .c oder .cpp?
Die Tatsache, daß der MS-Codegenerator stdafx.h eingebunden hat, lässt vermuten, daß es sich um c++ handeln könnte. AFX ist ein MS-internes Kürzel, das aus der Urzeit der MFC stammt (was eine übelbeleumundete Klassenbibliothek ist). "return 0 ist in C++ bei main() unnötig (genauso unnötig wie auto vor lokalen Variablen)." Wenn main mit einem Rückgabewert deklariert ist, sollte dann nicht -der Orthogonalität halber- der Compiler dies abweisen? Das Schlüsselwort "auto" ist in der Tat so entbehrlich wie ein Unternehmensberater ...
Programmieren möchte ich in C. Ich habe mir das Buch "C - Einführung und professionelle Anwendung" von Peter Prinz und Ulla Kirch-Prinz angeschafft. Anbei gab es zwei kostenlose Compiler: Gnu C/C++ und Microsoft Visual C++ Autoren Edition. Mit dem Buch bin ich bisher sehr zufrieden. @Rufus Wer Schreibfehler findet darf sie behalten! Trotzdem danke für die ausführliche Erklärung.
> Wenn main mit einem Rückgabewert deklariert ist, sollte dann nicht > -der Orthogonalität halber- der Compiler dies abweisen? In C ist "return 0;" Pflicht, in C++ nicht mehr; wenn nichts dasteht, nimmt der Compiler 0 als Rückgabewert an. Für Anfänger ist es aber vermutlich nicht verkehrt, erstmal return auch bei main() zu benutzen. Sonst besteht die Gefahr, irgendwann auf die "void main()"-Schiene zu kommen, was vom Standard nun überhaupt nicht mehr abgedeckt wird. Ansonsten ist es eher Geschmackssache, ob man bei main() return verwendet oder nicht.
@Ralf: Du solltest bei Visual C++ ein "leeres Projekt" (also eins ohne jede vorgegebene Quellcode-Datei) erstellen. So verhinderst du am elegantesten die MFC- und "stdafx"-Einbindung und ersparst dir eine Reihe Probleme. Du erstellst also ein "leeres Projekt"; als nächstes fügst du dem Projekt eine .c-Datei hinzu, in du den Code schreibst (den mit stdio.h aus deinem C-Buch). Wichtig ist die Endung ".c". Falls die Endung .cpp ist, wird der C++-Compiler aufgerufen, was bei einigen Codebeispielen zu Fehlern führen dürfte.
@Chris Super! Danke, so hat es funktioniert. Ich probierte zuerst den Code in einer .cpp Datei, was aber leider nicht geklappt hat. Der Code aus der automatisch generierten Beispieldatei hat mich dann doch etwas verwirrt, da Pointer erst im 13. Kapitel kommen und ich erst im 2. bin :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.