你能解释这个'Hello world'计划吗?

时间:2009-06-27 17:30:45

标签: c

我刚开始学习C但是我不理解这部分代码。任何人都可以解释每行代码及其作用。谢谢!请回答我说的而不是说(应该在书中说)谢谢。希望你们能帮助我。

#include <stdio.h>

void SayHello( void );

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

    return 0;
}


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

8 个答案:

答案 0 :(得分:39)

我建议你买一本不同的书,因为它现在应该告诉你了。但是,让我们来看看吧!

#include <stdio.h>

该部分告诉“preproccesor”(编译器的一部分经历并准备编译)在计算机的某个特殊部分中获取文件“stdio.h”的内容,然后将其打开源代码的顶部。这样,编译器可以知道下面的函数printf,参数需要什么,以及返回的值(在完成后返回)。

void SayHello( void );

这部分是声明一个功能。通过将定义放在那里,您可以在编写实现之前调用该函数。这个函数“header”告诉编译器会有一个返回void的函数(即什么都没有。完成后,没有返回任何值。例如,你不能int a = SayHello();,因为SayHello())没有返回任何内容。它也没有任何争议。所以,你不能写SayHello(34),因为它需要无效的参数,这意味着没有。

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

这部分是“主要”功能的开始。 main功能是计算机启动程序的目的。这是起点。这需要两个论点;在命令行(现在)传递的参数数量(int argc)和“字符串(char *)”的“数组”。数组包含相同类型数据的列表。所以你可以拥有char *的“数组”。如果你开始这样的程序:./myProgram fishargv[1]将保留字符数组(char *)“fish”。不要太担心这部分,你的书会在以后解释。

SayHello();

这部分调用函数SayHello()SayHello的标题在上面,但程序调用下面函数的实际实现。 SayHello不带参数,也不返回任何值(void)。计算机暂时跳转到SayHello功能。完成后,它将返回到它停止的main函数。我们稍后会看到实际的SayHello定义。

return 0;

main函数返回一个整数。如果一切顺利,return 0;意思是,程序优雅地退出。

} // end of the function

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

这部分是我们的实际功能。它的一个目标是将Hello, world!打印到控制台。我们通过调用我们包含的stdio.h文件中定义的另一个函数来实现此目的。它的名字是printf。它需要不同数量的字符串(这将在本书的后面部分介绍),并打印到控制台。你的书可能很快就会完全覆盖printf。现在,它所做的只是打印一个字符串(你可以用这样的格式打印:printf("My Num is: %d",34);%d代替34。但是,现在,请记住它打印一个字符串。因此,它打印“Hello world!”后跟一个换行符(\n)。printf返回int;但它仅用于错误恢复目的。{{ 1}}结束,它返回printf函数,然后结束并返回SayHello,完成并返回main

我希望这能很好地解释一切!

答案 1 :(得分:10)

我希望以下评论代码对您有所帮助:

#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.
}

答案 2 :(得分:7)

每行是什么意思?

// 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" );
}

参考

代码是如何执行的?

  • 有人使用命令行或快捷方式启动应用程序。
  • 调用main函数并给出命令行或快捷方式的参数。
  • main函数调用SayHello过程。
  • SayHello程序打印行Hello,world!并转到下一行。
  • 回到主程序,我们通过返回一切正常来结束应用程序。

这是如何工作的?

你可能不应该在这一点上看到这个细节,当你觉得你已经准备好更深入地了解在这个问题下发生的事情时,你可以阅读{{3}中的“堆栈在行动中”一节。 }。

答案 3 :(得分:6)

#include <stdio.h>

此行告诉编译器包含header file stdio.h,为C Standard Library中的标准输入/输出例程提供程序前向声明。

void SayHello(void);

这是函数的forward declarationfunction prototype。前向声明是一种告诉编译器稍后将定义函数但您希望它现在知道它以便您可以使用它的方法。此特定函数名为SayHello,它不接受任何参数,也不返回值。

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

此行表示名为main的函数的定义。函数main是程序执行开始的地方。此函数接受两个参数:argc类型为intargvconst char *数组。参数argcargv代表command-line arguments。参数argc表示命令行参数的数量,argv表示实际的命令行参数。该行的开头int指定函数main返回类型int的值。这一行与前一行的区别在于它不以分号(;)结尾,后面是一个左括号({)。

    SayHello();

这行代码调用名为SayHello的函数。此函数先前已声明,但未定义。

    return 0;

这行代码会导致main函数返回int0。任何main的来电者都会收到0的返回值。

}

这行代码告诉编译器我们处于main定义的末尾。

void SayHello(void) {

使用这行代码,您现在告诉编译器,接下来是第2行中承诺的函数SayHello的定义。

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

这行代码调用标准输入/输出函数printf,它是C Standard Library的一部分。函数printf使输出显示在终端上;它是一种相当灵活的路由,用于在终端上格式化和显示文本。在这里,您传递一个参数,即字符串"Hello, world!\n"。此字符串以escape character\n)结尾,并转换为newline。使用参数printf调用"Hello, world!\n"将导致

Hello, world!

显示在终端上。

}

这行代码告诉编译器我们处于SayHello定义的末尾。

简而言之,代码行告诉编译器在C标准库的标准输入/输出例程中包含方法的声明(这些定义稍后将由linker链接),声明名为SayHello的函数定义了在执行程序时调用的函数main,并定义了一个名为SayHello的函数。函数main调用函数SayHello并返回int0。函数SayHello导致行

Hello, world!

显示在终端上。

当程序执行时,执行将在函数main中开始,该函数调用函数SayHello,该函数在终端上打印字符串"Hello, world!",后跟换行符,然后返回到{{ 1}}将main值0返回给调用者。

答案 4 :(得分:3)

解释......

void SayHello( void );

这一行是函数原型。缺乏代码是故意的。这是C语言的一种方式,可以说某个时候某个函数会匹配这个签名。 C是一个自上而下的编译器,因此它必须先知道函数的结构才能使用它。

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

这是主要功能的声明。程序的命令行参数包含在argv参数中。 argc参数记录了argv参数中的参数数量。

SayHello();

调用函数SayHello传递无参数

return 0;

通过返回0结束程序,这表示程序成功。

void SayHello( void ) {

这是一个功能定义签名。它代表用户定义函数的开始。

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

这将打印文本“Hello,world!”然后是控制台的新行。

答案 5 :(得分:3)

#include <stdio.h>

包括标准输入/输出库。

void SayHello( void );

定义一个名为SayHello的函数,没有返回值且没有参数。此处未定义任何正文 - 稍后将对其进行定义。

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

定义另一个名为main的函数。它是您的计划的切入点。它需要2个参数 - 一个名为argc的整数(命令行参数的数量),以及一个名为argv的const char *数组(命令行参数)。启动身体。

SayHello();

调用我们之前定义的SayHello方法(运行里面的语句)。

return 0;

将0(成功)返回给操作系统。

}

结束main()体。

void SayHello( void ) {

启动前面定义的SayHello函数的主体。

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

打印“Hello,world!”到屏幕。 printf函数来自我们之前包含的标准输入/输出库。

}

结束SayHello()体。

该计划的输出将是:

Hello, World!

答案 6 :(得分:2)

#include“stdio.h”&lt; - 从另一个未知文件夹位置将另一个c ++文件插入此文件。需要程序与某些stdio.lib库链接,默认情况下通常会将其添加到程序链接中。

MyType SayHello(void); &lt; - 返回MyType-class-instance且没有参数的函数声明

MyType SayHello(); &lt; - 同样的事情

MyType SayHello(0); &lt; - 创建带有整数0的MyType-class-instance传入类构造函数。

void SayHello(); &lt; - 函数声明什么都不返回(里面没有return语句)

argc / argv&lt; - “参数计数”和“参数向量”的愚蠢缩写

void SayHello(){...}&lt; - 在程序二进制文件中编译的代码,任何知道此函数声明的人都可以调用它。

printf(“Hello,world!\ n”); &lt; - 使用一个字符串参数跳转到printf-function的内存地址。

答案 7 :(得分:1)

填充,以便下一行被识别为代码块

#include <stdio.h>

这就是说,“在编译器搜索路径中搜索文件'stdio.h'的包含文件,并在此处插入文件的内容。请注意,这是在编译器看到之前发生的。

void SayHello( void );

这是一个功能原型。它基本上说“将会定义一个匹配此签名的函数。

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

这称为上述功能。当达到此值时,执行进入函数体,并在函数结束时返回。

    return 0;

将值0返回给系统(按惯例,这意味着没有错误)并退出程序。     }

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

这将调用C标准库函数printf,并将给定的字符串打印到stdout。

}