6 Stimmen

Können Sie dieses "Hello world"-Programm erklären?

Ich habe gerade angefangen, C zu lernen, aber ich verstehe diesen Teil des Codes nicht. Kann mir jemand die einzelnen Codezeilen erklären und was sie bewirken? Ich danke Ihnen! Bitte antworten Sie einfach auf das, was ich gesagt habe, anstatt zu sagen (es sollte im Buch stehen) Danke. Hoffentlich könnt ihr mir helfen.

#include <stdio.h>

void SayHello( void );

int main (int argc, const char * argv[]) {
    SayHello();

    return 0;
}

void SayHello( void ) {
    printf( "Hello, world!\n" );
}

39voto

micmoo Punkte 5941

Ich würde vorschlagen, dass Sie sich ein anderes Buch besorgen, denn das hätte Ihnen wahrscheinlich schon längst sagen müssen. Wie auch immer, kommen wir zur Sache!

#include <stdio.h>

Dieser Teil weist den "Preproccesor" (den Teil des Compilers, der die Dinge durchgeht und für die Kompilierung vorbereitet) an, den Inhalt der Datei "stdio.h" in einem speziellen Teil Ihres Computers zu nehmen und oben auf Ihren Quellcode zu legen. Auf diese Weise kann der Compiler von der Funktion printf unten, was es als Argumente annimmt und welchen Wert es zurückgibt (nach Beendigung zurückgibt).

void SayHello( void );

Dieser Teil ist die Deklaration einer Funktion. Indem Sie die Definition dort oben platzieren, können Sie die Funktion aufrufen, bevor Sie ihre Implementierung schreiben. Dieser Funktions-"Header" teilt dem Compiler mit, dass es eine Funktion geben wird, die void (d. h. nichts) zurückgibt. Nach Beendigung der Funktion wird kein Wert zurückgegeben. Zum Beispiel können Sie konnte nicht schreiben. int a = SayHello(); weil nichts zurückgegeben wird von SayHello() ). Er nimmt auch keine Argumente entgegen. Sie könnten also nicht schreiben SayHello(34) weil es ungültige Argumente annimmt, also keine.

int main (int argc, const char * argv[]) { 

Dieser Teil ist der Beginn der "Hauptfunktion". Die main ist die Funktion, mit der Ihr Computer das Programm startet. Dies ist der Startpunkt. Sie nimmt zwei Argumente entgegen: die Anzahl der Argumente ( int argc ), die auf der Befehlszeile übergeben werden, und ein "Array" von "Strings ( char * )". Ein Array enthält eine Liste von Daten desselben Typs. Sie können also ein "Array" von char * . Wenn Sie Ihr Programm auf diese Weise starten: ./myProgram fish , argv[1] würde das Array von Zeichen enthalten ( char * ) "Fisch". Machen Sie sich nicht zu viele Gedanken über diesen Teil, Ihr Buch wird ihn später erklären.

SayHello();

Dieser Teil ruft die Funktion SayHello() . SayHello Die Kopfzeile der Funktion steht oben, aber das Programm ruft die eigentliche Implementierung der Funktion unten auf. SayHello nimmt keine Argumente entgegen und gibt keinen Wert zurück ( void ). Der Computer springt vorübergehend auf den SayHello Funktion. Wenn die Funktion beendet ist, kehrt sie zum main Funktion, wo sie aufgehört hat. Wir kommen nun zur eigentlichen SayHello Definition später.

return 0;

El main Funktion gibt eine ganze Zahl zurück. Wenn alles gut gegangen ist, return 0 was bedeutet, dass das Programm ordnungsgemäß beendet wurde.

} // end of the function

void SayHello( void ) { // We already covered this part above
      printf( "Hello, world!\n" ); 
}

Dieser Teil ist die eigentliche Funktion, die wir gemacht haben. Sein einziges Ziel ist es, zu drucken Hello, world! auf die Konsole übertragen. Wir erreichen dies durch den Aufruf von eine andere Funktion, die in der stdio.h Datei, die wir aufgenommen haben. Ihr Name lautet printf . Es nimmt eine unterschiedliche Anzahl von Zeichenketten entgegen (dies wird viel später in Ihrem Buch behandelt) und gibt sie auf der Konsole aus. Ihr Buch wird wahrscheinlich sehr bald printf vollständig behandeln. Im Moment ist alles, was es tut, einen einzelnen String zu drucken (Sie können es mit einem Format wie diesem drucken lassen: printf("My Num is: %d",34); das ersetzt %d con 34 . Denken Sie aber zunächst daran, dass eine Zeichenkette gedruckt wird. Er druckt also "Hallo Welt!", gefolgt von einem Zeilenumbruch ( \n ). printf gibt eine int aber es dient nur der Fehlerbehebung. Nach printf beendet ist, kehrt es zum SayHello Funktion, die dann beendet wird und zurück zu main die beendet wird und zurückkehrt 0 .

Ich hoffe, das erklärt alles gut!

10voto

Alan Haggai Alavi Punkte 69510

Ich hoffe, der folgende kommentierte Code wird Ihnen helfen:

#include <stdio.h>  // Include the header file named `stdio.h`

void SayHello( void );  // Function named `SayHello` has been declared. It takes no (void) parametres.

int main (int argc, const char * argv[]) {  // `main()` function is part of all C/C++ programs. It accepts command line arguments and returns an exit code. In this case, it returns an integer exit code.
    SayHello();  // Call the function named `SayHello`

    return 0;  // Return from the `main()` function with the code 0 (success).
}

void SayHello( void ) {  // Definition of function `SayHello`.
    printf( "Hello, world!\n" );  // Use the `printf()` function in `stdio.h` header file to print the message.
}

7voto

Tamara Wijsman Punkte 12072

Was bedeutet jede Zeile?

// Include the Standard Input/Output Header to use its declared functions, ...
#include <stdio.h>

// Declare a function that takes no parameters and doesn't return a value.
void SayHello(void);

// Declare the main function which takes the program's character string
// arguments and returns an integer error code.
int main (int argc, const char * argv[]) {
    // Call the above declared function with no parameters.
    SayHello();

    // Return the error code for OK to tell the OS everything went fine.
    return 0;
}

// Define a function that takes no parameters and doesn't return a value.
void SayHello( void ) {
    // Print a (constant) character string to the console that says Hello, world!
    // and places the cursor on the next line.
    printf( "Hello, world!\n" );
}

Referenzen

Wie wird der Code ausgeführt?

  • Jemand startet die Anwendung, entweder über die Befehlszeile oder eine Verknüpfung.
  • Die Hauptfunktion wird aufgerufen und erhält die Parameter der Befehlszeile oder des Shortcuts.
  • Die Hauptfunktion ruft die SayHello-Prozedur auf.
  • Die SayHello-Prozedur gibt die Zeile Hello, world! aus und geht zur nächsten Zeile über.
  • Zurück in der Hauptprozedur beenden wir die Anwendung mit der Rückmeldung, dass alles in Ordnung ist.

Wie funktioniert das unter der Haube?

Wenn Sie bereit sind, ein noch tieferes Verständnis dessen zu erlangen, was unter dem Dach passiert, können Sie den Abschnitt "Der Stapel in Aktion" in LearnCPP: Der Stack und der Heap .

6voto

jason Punkte 227577
#include <stdio.h>

Diese Zeile teilt dem Compiler mit, dass er die Header-Datei stdio.h dem Programm Forward-Deklarationen für die Standard-Ein-/Ausgaberoutinen in der Datei C-Standardbibliothek .

void SayHello(void);

Dies ist eine Terminerklärung o Funktionsprototyp für eine Funktion. Eine Vorwärtsdeklaration ist eine Möglichkeit, dem Compiler mitzuteilen, dass eine Funktion später definiert wird, aber Sie wollen, dass er sie jetzt kennt, damit Sie sie verwenden können. Diese spezielle Funktion heißt SayHello akzeptiert er keine Parameter und gibt keinen Wert zurück.

int main(int argc, const char *argv[]) {

Diese Zeile zeigt an, dass die Definition einer Funktion namens main . Die Funktion main ist der Ort, an dem die Programmausführung beginnt. Diese Funktion nimmt zwei Parameter entgegen: argc ist vom Typ int y argv ist eine const Palette von char * . Die Parameter argc y argv vertreten Befehlszeilenargumente . Der Parameter argc steht für die Anzahl der Befehlszeilenargumente und argv steht für die eigentlichen Befehlszeilenargumente. Der Anfang der Zeile, int gibt an, dass die Funktion main gibt einen Wert vom Typ int . Diese Zeile unterscheidet sich von der vorherigen dadurch, dass sie nicht mit einem Semikolon ( ; ) und wird von einer öffnenden Klammer gefolgt ( { ).

    SayHello();

Diese Codezeile ruft eine Funktion namens SayHello . Diese Funktion wurde zuvor deklariert, aber nicht definiert.

    return 0;

Diese Codezeile bewirkt, dass die main Funktion zur Rückgabe der int Wert 0 . Jeder Anrufer von main erhält einen Rückgabewert von 0 .

}

Diese Codezeile teilt dem Compiler mit, dass wir uns am Ende der Definition von main .

void SayHello(void) {

Mit dieser Codezeile teilen Sie dem Compiler mit, dass das Folgende die Definition der Funktion ist SayHello die zuvor in Zeile zwei versprochen wurde.

    printf("Hello, world!\n");

Diese Codezeile ruft die Standard-Ein-/Ausgabefunktion auf printf die Teil des C-Standardbibliothek . Die Funktion printf bewirkt, dass die Ausgabe auf dem Terminal angezeigt wird; es ist ein ziemlich flexibles Routing für die Formatierung und Anzeige von Text auf dem Terminal. Hier übergeben Sie einen Parameter, die Zeichenkette "Hello, world!\n" . Diese Zeichenfolge endet mit einem Fluchtzeichen ( \n ), die in eine Zeilenumbruch . Aufruf von printf mit dem Parameter "Hello, world!\n" wird verursachen

Hello, world!

die auf dem Terminal angezeigt werden sollen.

}

Diese Codezeile teilt dem Compiler mit, dass wir uns am Ende der Definition von SayHello .

Kurz gesagt, die Codezeilen weisen den Compiler an, die Deklarationen der Methoden in die Standard-Ein-/Ausgaberoutinen der C-Standardbibliothek aufzunehmen (die Definitionen werden später von der Linker ), deklariert eine Funktion namens SayHello definiert die Funktion main die bei der Ausführung des Programms aufgerufen wird und eine Funktion namens SayHello . Die Funktion main ruft die Funktion SayHello int Wert 0 . Die Funktion SayHello bewirkt, dass die Linie

Hello, world!

die auf dem Terminal angezeigt werden sollen.

Wenn das Programm ausgeführt wird, beginnt die Ausführung mit der Funktion main die die Funktion SayHello die auf dem Terminal die Zeichenfolge ausgibt "Hello, world!" gefolgt von einem Zeilenumbruch und kehrt dann zu main die die int Wert 0 an den Anrufer.

3voto

JaredPar Punkte 699699

Erläuterung ...

void SayHello( void );

Diese Zeile ist ein Funktionsprototyp. Das Fehlen von Code ist beabsichtigt. Es ist ein Weg für die C-Sprache zu sagen, dass es irgendwann später eine Funktion geben wird, die dieser Signatur entspricht. Da C ein Top-Down-Compiler ist, muss er die Struktur einer Funktion kennen, bevor er sie verwenden kann.

int main (int argc, const char * argv[]) {

Dies ist die Deklaration der Hauptfunktion. Die Befehlszeilenargumente für das Programm sind im Parameter argv enthalten. Der argc-Parameter gibt die Anzahl der Argumente an, die im argv-Parameter enthalten sein werden.

SayHello();

Ruft die Funktion SayHello auf und übergibt keine Parameter

return 0;

Beendet das Programm durch Rückgabe von 0, was anzeigt, dass das Programm erfolgreich war.

void SayHello( void ) {

Dies ist eine Funktionsdefinitionssignatur. Sie stellt den Beginn einer benutzerdefinierten Funktion dar.

printf( "Hello, world!\n" );

Dies gibt den Text "Hello, world!" gefolgt von einer neuen Zeile auf der Konsole aus.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X