C语言入门(8/100)
在接触了结构
与语句
等内容后,我们开始学习函数
Day 8 的学习中,我们对函数的定义
和声明
做一定的补充说明。
函数
:- 函数定义
- 函数声明
一、函数定义和声明
1.1 概念
函数定义
:是指函数的具体实现,交代函数的功能实现。
函数声明
:把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。
告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。
函数的声明一般出现在函数的调用之前。要满足先声明后调用。
函数的声明一般要放在
头文件
中的。
注意
:对于一些老旧的编译器来说,函数声明是不带参数列表的。
- 总结:
- 在设计多文件程序的时候,一般在
以.h为结尾的头文件
内放置函数的声明,在.c源文件
内放置函数的定义。
1.2 示例
让我们用一段代码直观地区别函数定义
与函数声明
。
#include<stdio.h>
int getMax(int, int); //函数声明
void main()
{
int t=getMax(12, 21);
printf("%d\n", t);
getchar();
}
int getMax(int a, int b) //函数定义
{
if (a > b) {
return a;
}
else {
return b;
}
}
1.3 注意事项
- 在C语言中,函数的定义顺序是有讲究的:
- 默认情况下,只有后面定义的函数才可以调用前面定义过的函数
- 如果想把函数的定义写在main函数后面,而且main函数能正常调用这些函数,那就必须在main函数的前面进行函数的声明, 否则系统搞不清楚有没有这个函数
- 系统搞不清楚这个函数接收几个参数
- 系统搞不清楚这个函数的返回值类型是什么
- 所以函数声明,就是在函数调用之前告诉系统, 该函数叫什么名称, 该函数接收几个参数, 该函数的返回值类型是什么
示例:
使用函数前,需要在main函数前对使用的函数进行声明
#include<stdio.h>
int getMax(int, int);
void main()
{
int t=getMax(12, 21);
printf("%d\n", t);
getchar();
}
int getMax(int a, int b)
{
if (a > b) {
return a;
}
else {
return b;
}
}
或者将函数定义在main函数的前面,则不需要声明
#include<stdio.h>
int getMax(int a, int b)
{
if (a > b)
{
return a;
}
else {
return b;
}
}
void main()
{
int t=getMax(12, 21);
printf("%d\n", t);
getchar();
}
- 函数的声明格式:
- 将自定义函数时
{}
之前的内容拷贝到调用之间即可 - 例如,
- 将自定义函数时
int max( int a, int b );
//或者另一种声明格式
int max( int, int );
示例;
// 函数声明
void getMax(int v1, int v2);
int main(int argc, const char * argv[])
{
getMax(10, 20); // 调用函数
return 0;
}
// 函数实现
void getMax(int v1, int v2)
{
int max = v1 > v2 ? v1 : v2;
printf("max = %i\n", max);
}
函数声明注意点
:
- 函数的实现不能重复, 而函数的声明可以重复
// 函数声明
void getMax(int v1, int v2);
void getMax(int v1, int v2);
void getMax(int v1, int v2); // 不会报错
int main(int argc, const char * argv[])
{
getMax(10, 20); // 调用函数
return 0;
}
// 函数实现
void getMax(int v1, int v2)
{
int max = v1 > v2 ? v1 : v2;
printf("max = %i\n", max);
}