人烟 发表于 2020-12-22 16:49:57

初学c 执行顺序疑惑

代码是c primer中的 学习过程中的疑惑

#include <stdio.h>
void butler(void);
int main(void)
{
    printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable DVD. \n");
};

void butler(void)
{
    printf("You rang,sir?\n");
}


这段代码在main上面先声明了butler函数 并设置为空 在main函数体内调用butler这个空函数   执行到这的时候 main里调用的butler()函数 应该是空返回值吧main函数块结束再定义butler
代码从上到下执行 main函数第一个运行 这样的话 butler()函数的定义在main函数执行之后 那main函数在执行的时候 buter()函数应该只是声明了 并没有被定义 调用结果应该为空呀为什么执行结果 main中调用butler() 结果就是main()之外定义butler的结果??

讲的不太明白 主要就是疑惑执行顺序 https://s3.ax1x.com/2020/12/22/rrUzGt.png

jackz007 发表于 2020-12-22 17:29:24

本帖最后由 jackz007 于 2020-12-22 17:32 编辑

#include <stdio.h>

void butler(void);    //这是函数声明语句,是用来告诉编译器的,不会被执行,之所以有这一句是因为 main() 中调
                      //用了函数 butler(),而这个函数是在 main() 之后才定义的,如果把 butler() 的函数定
                      //义提前到 main() 的位置之前,这条语句就彻底没有用了。
int main(void)
{
    printf("I will summon the butler function.\n");          // 第 1 步,打印信息 "I will summon the butler function.\n"
    butler();                                                // 第 2 步,调用函数 butler(),打印信息 "You rang,sir?\n"
    printf("Yes. Bring me some tea and writeable DVD. \n");// 第 3 步,打印信息"Yes. Bring me some tea and writeable DVD. \n"
};

void butler(void)
{
    printf("You rang,sir?\n");
}

han125416866 发表于 2020-12-22 17:31:23

书里好像有提到过,小甲鱼视频里也讲过,按我的理解就是main是主函数,逐条执行main里所有语句直到主函数结束为止,学习时间长了你就明白怎么回事了.

782353676 发表于 2020-12-22 20:25:26

butler为函数体.我们在c中.程序总是从main函数开始,到main函数结束.
由于程序是自上向下执行.我们在执行main函数时,调用了butler函数体.我们需要让main函数知道,我们有butler这个东西.第一句出现的void butler();相当于声明告知程序,我们定义了一个名为butler的函数体.
当然我们把函数体写在main'函数的上方就不需要声明了.
页: [1]
查看完整版本: 初学c 执行顺序疑惑