内部函数与外部函数

  • 在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为:
    static [数据类型] 函数名([参数])
  • 这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。
  • 在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为:
    extern [数据类型] 函数名([参数])
  • C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。

静态变量只赋值一次

外部函数练习

hello.c

#include 
#include "test.c" //引用test.c文件
extern void printLine() //这里定义的方法对吗?
{
printf("**************
");
}
int main()
{
say();
return 0;
}

test.c

#include 
void printLine();
static void say(){
printLine();
printf("I love imooc
");
printf("good good study!
");
printf("day day up!
");
printLine();
}

对于hello.c来说,直接引入了test.c文件。那么就可以调用testc中的static方法say()
而对于test.c并没有引入,可以通过声明来调用另一个源文件中暴露出来的方法。

综合练习

北京市出租车打车计费规则如下:

  1. 每公里单价计费2.3元
  2. 起步价13元(包含3公里)
  3. 晚上23点(含)至次日凌晨5点(不含)打车,每公里单价计费加收20%。
  4. 每次乘车加收1元钱的燃油附加税。 小明每天上下班都要打车,​​​公司和家的距离为12公里,上午上班时间为9点,下午下班时间为6点。 请编写一个小程序计算小明每天打车的总费用。

#include 

float taxifee(int clock,int miles)
{
float money;
if(miles<=3)
{
money=14;
printf("费用为14
");
}
else
{
if(clock>=23 || clock<5)
{
money=13+1+2.3*(miles-3)*1.2;
printf("夜间车费为:%f
",money);
}
else
{
money=13+1+2.3*(miles-3);
printf("日间车费为:%f
",money);
}
}

return money;
}
int main()
{
printf("打的总费用:%.1f
",taxifee(9,12)+taxifee(18,12));
return 0;
}