第一感受——main 函数

作者:南郁(nanyu) www.d2school.com


这是我们第1小节写的Hello World程序代码:

//---------------------------------------------------------------------------

#pragma hdrstop

#include <iostream>
#include <cstdlib>

//---------------------------------------------------------------------------

#pragma argsused


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

    //输出对世界的问候:
    std::cout << "Hello world!" << std::endl;

    std::system("pause");  //让程序暂停

    return
0;
}

//---------------------------------------------------------------------------

(第1小节的代码:hello\ch1)

第3小节:main 函数

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

日常生活中,要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”以实现。在C++程序的世界里,“功能”可称呼为“函数”,因此“函数”其实就是一段实现了某种功能的代码,并且可以供其它代码调用。

一个程序,无论复杂或简单,总体上都是一个“函数”;这个函数就称为“main 函数”,也就是“主函数”。比如有个“做菜”程序,那么“做菜”这个过程就是“主函数”。在主函数中,根据情况,你可能还需要调用“买菜,切菜,炒菜”等子函数。

接下来的问题是,“到底是谁调用你去做菜”?也许是夫人的命令,也许是自己的确饿了;但不管如何,你做菜总是因为有人要求你去做。A要求B去做某事,这称为“A调用B”。对程序来说,调用它们的人就是“操作系统”。我们画一个“调用”过程图来加深理解。

(函数调用示意图)

图中带箭头的线,用于表示“调用”。

“操作系统”——先认为就是我们常用的“Windows”系统,为什么要“调用”一个程序呢?这不难说清,比如有个人今天很无聊,决定玩个“挖地雷”的游戏,于是该人在开始菜单里,找到附件,再找到“挖雷”程序,用鼠标一点!得,这其实是该人向发出一个命令:“请运行挖雷程序吧!”,于是“Windows”就调用“挖雷”程序。这就是一个例子:由最终用户发起的调用。当然,并不一定是由“人”来发起最初的调用;也可以Windows本身,还可以是一个“程序”去调用另一个“程序”,比如“病毒程序”去调用格式化硬盘的程序……这些暂时不是我们所关心的,所以我们只从操作系统调用这里说起。

上图中,我们把“老婆大人”比喻成“操作系统”,由她去调用“做菜”这道程序,而做菜程序被当成“主函数”,该主函数又去按照既定的顺序,调用各个子函数。

操作系统的地位很高,所以它事先规定,任何程序都必须有一个“入口”,这样操作系统才能从这个入口“进入”到程序内部开始执行代码 ,这个“入口”,就是主函数。

本图也同样表达了一件大“功能”,被分解为“小功能”的过程。即“主函数”调用子函数,子函数又调用了“子子函数”。

不过大家不要被我误导,事实上没有“子子函数”这种说法。考虑一种情况:子函数A可以调用子函数B,而子函数B又可以调C函数,最后C函数可反过来调用A函数(称为递归调用),那么谁是“子”谁是“父”难以定义,因此,只要不是主函数,在调用关系上,我们都统称为“子函数”,甚至就叫为“函数”。关心一函数位于第几层调用关系,并没有多大的意义。

言归正传。函数名之后跟随了一对花括号{ },花括号之间是数行代码;这些代码组合起就是函数所要完成的功能;它们可以是直接实现功能的代码,也可以是调用其它子函数的代码。

 void foo ()--> 函数头
 {  
    ...
}
--> 函数体

作业:

  1. 一个程序,最初的调用者是谁?
  2. 为什么不提倡“子子函数”这种说法?
  3. 以下函数代码,其函数名是什么?函数体包括哪些行?

int add(int a, int b)

{

    return (a + b);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值