mikrocontroller.net

Forum: PC-Programmierung "Hallo Welt" Beispiel aus Visual C++


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ...

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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
:-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.