C语言中的函数
函数的由来:
程序 = 数据结构 + 算法
C程序 = 数据 + 函数
函数用来定义算法
函数的意义
模块化程序设计
面向过程的程序设计
- 面向过程是一种以过程为中心的编程思想
- 首先将复杂的问题分解为一个个容易解决的问题
- 分解过后的问题可以按照步骤一步步完成
- 函数是面向过程在C语言中的体现
- 解决问题的每个步骤可以用函数来实现
声明和定义
- 声明的意义在于告诉编译器程序单元的存在
- 定义则明确指示程序单元的意义
- C语言中通过extern进行程序单元的声明
- 一些程序单元在声明时可以省略extern
严格意义上的声明和定义并不相同
例子1:声明和定义不同
main.c
#include<stdio.h>
#include<malloc.h>
extern int g_var;
extern struct Test;
int main()
{
struct Test* p = NULL; // (struct Test*)malloc(sizeof(struc Test)); // error
printf("p = %p
",p);
free(p);
return 0;
}
global.c
int g_var;
struct Test
{
int x;
int y;
};
若struct Test* p = (struct Test*)malloc(sizeof(struct Test));会出现编译错误,不能依赖文件的编译顺序,当先编译main.c时,知识告诉编译器存在该结构体,当编译sizeof(struct Test)时,编译器不能从其他文件获取它的类型大小信息
小结
- 函数是面向过程思想在C语言中的体现
- 面向过程是由上到下分解问题的设计方法
- 程序中的定义和声明完全不同
- C语言中通过extern对程序单元进行声明