34-1 函数的声明
1、告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
2、函数的声明一般出现在函数的使用之前。要满足先声明后使用。
3、函数的声明一般要放在头文件中的。
34-2 函数的定义
函数的定义是指函数的具体实现,交待函数的功能实现。
34-3 函数声明和定义的具体应用
错误案例:
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//加法
int sum = Add(a, b);
printf("%d\n", sum);
return 0;
}
//函数的定义
int Add(int x, int y)
{
return x + y;
}
报错信息:
解释:
编译器从上往下进行,当遇到int sum = Add(a,b)时,还没有遇到对Add的定义
如果一定要把对Add的定义放在前面,我们可以进行函数的声明:
//函数的声明
int Add(int, int);
//int Add(int x, int y);也可以
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//加法
int sum = Add(a, b);
printf("%d\n", sum);
return 0;
}
//函数的定义
int Add(int x, int y)
{
return x + y;
}
运行结果:
进一步完善:
定义一个头文件:
再创建一个源文件:
把函数声明放在Add.h里面:
注:#pragma once是为了防止头文件被重复包含
把函数定义放在Add.c里面:
如果想要在test.c里面使用Add函数,直接使用头文件即可:
运行结果:
我们把Add.h和Add.c合称为加法模块
C语言中自带的头文件,用< >
自定义的头文件,用" "
具体原因后续会讲
为什么要这么麻烦地写在不同文件呢?
在初学编程的时候,觉得把所有的代码写到一个文件中最方便。但是,在公司里不是这么写代码的!
1、协作的角度
2、模块化设计,有助于阅读和维护
或许还有UU会疑问,就算要放在不同的文件里,只创建.c文件放函数不就可以了,为什么还要创建.h文件进行声明呢?
1、头文件的包含(#include "Add.h")就是把头文件的内容全部拷贝过来,即把函数声明拷贝过来了,相当于进行了函数声明
2、 当售卖代码时,只向甲方提供静态库(.lib)和.h文件,这样不会泄露你的源码,甲方可以通过.h文件了解函数的意义,调用静态库来运行程序。具体的操作我们后续会讲解。