函数的概念
函数就是功能。每一个函数用来实现一个特定的功能。函数的名字应反映其代
表的功能。
main函数必须要由,且只能由一个。其他函数可以有多个或者没有。
函数的定义
/*
返回值类型 函数名字(形参列表)
{//函数体
}
*/
int max(int a, int b)
{if(x>y){return x;}else{return y}
}
形参必须带类型,而且以逗号分隔
函数不能嵌套,不能再一个函数体内定义另外一个函数。
函数名不能重复
函数的分类
从定义角度分类(函数是谁实现的)
1、库函数(c库实现的)
2、自定义函数(程序员自己实现的函数)
3、系统调用(操作系统实现的函数)
从参数角度分类
1、有参函数
函数由形参,可以是一个或者多个。
int func(int a, float b, double c)
{
}
2、无参函数
//void可以省略
int func(void)
{
}
从返回值角度分类
带返回值的函数
//必须返回一个char类型的数据
char func()
{char b = 'a';return b;
}
//默认返回整型
func()
{return 1;
}
不带返回值的函数
//void 表示没有返回值,不需要return
void func(int a)
{}
函数的声明
1、概念
对已经定义的函数,进行说明。
函数的声明可以声明多次。
2、为什么要说明
有些情况下,不对函数进行声明,编译器编译的时候,可能不认识这个函数。因为编译器在编译c程序的时候,是从上往下编译的。
3、声明的方法
什么时候需要声明
1、调用函数和被调用函数在一个.c文件的时候
//被调用函数在上,不需要声明
void func(void)
{printf("hello");
}
void main()
{func();
}
//被调用函数在下,需要声明
void main()
{void func(void);func();
}
void func(void)
{printf("hello");
}
2、调用函数和被调用函数不在一个.c文件的时候
声明方法
1、函数中声明
void main()
{float add(float a, float b);//函数中声明//float add(float, float);//参数名可以省略func();
}
float add(float a, float b)
{return a+b;
}
2、文件开头进行声明
float add(float a, float b);//在文件开头进行声明
void main()
{func();
}
float add(float a, float b)
{return a+b;
}
3、其他文件的函数
文件Math.c
#include <stdio.h>float add(float a, float b)
{return a + b;
}
头文件Math.h
extern float add(float a, float b);
main函数所在文件
#include<stdio.h>
#include "Math.h"
//或者不适用头文件,直接文件开头声明外部函数
//extern float add(float a, float b);
int main()
{float a = add(1.1f, 2.2f);return 0;
}
函数的调用
定义:
float add(float a, float b);
void main()
{//调用方传递的叫实参add(1.1f, 2.2f);
}
//形参
float add(float a, float b)
{return a+b;
}
内部函数
如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static,即:
static类型名函数名(形参表);
例如,函数的首行:
static int fun(int a,int b)
表示fun是一个内部函数,不能被其他文件调用。
外部函数
如果在定义函数时,在函数首部的最左端加关键字extern,则此函数是外部函数,可供其他文件调用。
如函数首部可以为
extern int fun(int a, int b)
这样,函数fun就可以为其他文件调用。
C语言规定,如果在定义函数时省略extern,则默认为外部函数。