函数是c语言的功能单位,实现一个功能可以封装一个函数来实现
一个C程序可由多个源文件组成
一个源文件可由一个或多个函数组成
编译时以一个源文件为单位进行编译,而不是以函数为单位进行编译
C程序的执行总是以main()函数开始,在main()中结束整个程序的运行
从定义角度,C语言可分类为:
从用户角度,C语言可分类为:
库函数:C语言提供了丰富的库函数,使用时必须用
#include <头文件>
ceil(x),对x向上取整
floor(x),对X向下取整
abs(x),求x绝对值
fabs(x),对浮点数x求绝对值
sqrt(x),x的1/2次幂
exp(x),求e的x次幂
int fun(void)
{}
int fun()
{}
int fun(int a,float b,double c)
{}
char fun()
{
char b='a';
return b;
}
fun() #定义函数时如果没有定义函数返回值类型,则默认返回整型
{
return 1;
}
void fun(形参表)
{
return; # 不用return也可以结束调用
}
void fun(void) # 无返回值,无参函数
变量 = 函数名(实参列表);
mun = max(4,8);
函数名(实参列表);
void fun()
{
return 1;
}
int main()
{
fun(); # 直接调用
}
函数名(实参列表); //带参数
函数名(); //没有参数
注意:实参可以是常量,变量,表达式;形参是被调用函数的局部变量
定义:对已经定义的函数,进行说明.函数的声明可以声明多次,但是定义只有一次
需要声明的情况:
1.当主调函数和被调函数在同一个.c文件中的时候
void fun(void)
{
printf("hello world\n");
}
int main()
{
fun();
}
int main()
{
fun();
}
void fun(void)
{
printf("heool world\n");
}
声明方法:
void fun(void); # 直接声明法
int main()
{
fun();
}
void fun(void)
{
printf("heool world\n");
}
注意:自己创建的头文件用双引号,尖括号是直接到系统默认的路径下寻找库文件;双引号先到当前目录下找,找不到后再去系统默认的路径.
2.主调函数和被调函数不在同一个.c文件中的时候
一个分文件对应一个头文件,最后如果在主文件调用分文件的函数,只需要在主文件声明分文件的头文件即可,使得文件更加模块化
auto变量:函数中的形参和局部变量,如果不专门声明为static存储类别,都是动态地分配存储空间(栈),数据存储在动态存储区中。函数内定义的局部变量,默认为auto
static局部变量:在局部变量定义前加static关键字,则将该变量声明为静态局部变量,存储在静态数据区
register寄存器变量:正常情况下,变量存放在内存中,CPU每次使用数据要从内存中读取。将局部变量的值放在CPU寄存器中,需要时直接取出参加运算,无需从内存中读取,这种变量称寄存器变量
只有自动变量、形式参数可作为寄存器变量,全局变量不能(即动态存储)
现在的优化编译系统能自动识别使用频繁的变量,自动存放在register中,不必要特别声明
由于寄存器变量使用的是CPU中的寄存器,寄存器存储变量没有地址,不能使用“&”求其地址
常用于循环控制变量,发挥存取速度快的优点
extern外部变量:静态存储
extern float A;
静态全局变量:当需要将全局变量限制为只在定义它的源文件内使用而不能被其他源文件使用时,在定义时加上static将其申明为静态全局变量
定义:建立存储空间
int a;
声明:不需要建立存储空间的声明
extern int a; <=> extern a;
int main()
{
extern int A; //声明A是一个已经定义了的外部变量
dosth(); //执行函数
}
int A;//定义A为整型的外部变量(全局变量)
外部变量
用static声明变量的作用:
根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数
定义:又称静态函数,只能在本文件中被调用
格式:
static 类型标识符 函数名(形参表){....}
static int f(void)
定义:可供其他文件调用的函数
格式:
extern 类型标识符 函数名(形参表){....}
如果在定义函数时省略extern,则隐含为外部函数