35、static和extern对函数的作用

1、概念
  • 外部函数: 定义的函数能被本文件和其它文件访问,默认情况下所有函数都是外部函数。因此,不允许有同名外部函数存在
  • 内部函数: 定义的函数只能被本文件访问,其它文件不能。因此,允许不同文件中有同名的内部函数
2、定义格式
2.1、外部函数

[extern] 函数名(形参列表)

2.2、内部函数

[static] 函数名(形参列表)

3、函数案例
3.1、源码
01.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
extern void func1();
void func2();
void func3();

// 定义内部函数
static void func4()
{
printf("01.c -> this is func4()\n");
}

int main()
{
func1();
func2();
func3();
func4();
return 0;
}
02.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
// 定义外部函数的完整写法
extern void func1()
{
printf("this is func1()\n");
}

// 省略 extern
void func2()
{
printf("this is func2()\n");
}

// 定义内部函数
static void func4()
{
printf("02.c->this is func4()\n");
}

// 间接调用 func4
void func3()
{
printf("this is func3()\n");
func4();
}
3.2、运行结果

运行结果