1、C语言中的函数
函数的由来
函数用来定义算法
2、函数的意义
模块化程序设计
C语言中的模块化
3、面向过程的程序设计
面向过程是—种以过程为中心的编程思想
首先将复杂的问题分解为—个个容男解决的问题
分解过后的问题可以按照步骤—步步完成
函数是面向过程在C语言中的体现
解决问题的每个步骤可以用函数来实现4、声明和定义
声明的意义在于告诉编译器程序单元的存在
定义则明确指示程序单元的意义
C语言中通过extern进行程序单元的声明
—些程序单元在声明时可以省略extern
5、实例分析
声明和定义不同 43-1.c43-1.c
- #include <stdio.h>
- #include <malloc.h>
- extern int g_var;
- extern struct Test;
- int main()
- {
- extern void f(int i, int j);
- extern int g(int x);
- struct Test* p = NULL; // (struct Test*)malloc(sizeof(struct Test));
- printf("p = %p\n", p);
- //g_var = 10;
- printf("g_var = %d\n", g_var);
- f(1, 2);
- printf("g(3) = %d\n", g(3));
- free(p);
- return 0;
- }
global.c
- #include <stdio.h>
- int g_var = 10;
- struct Test
- {
- int x;
- int y;
- };
- void f(int i, int j)
- {
- printf("i + j = %d\n", i + j);
- }
- int g(int x)
- {
- return (int)(2 * x + g_var);
- }
即可省略extern 直接用struct Test声明
若 struct Test* p = (struct Test*)malloc(sizeof(struct Test));
不能依赖于文件的编译顺序,当先编译43-1.c时,只是声明struct Test,
告诉编译器存在该结构体,当编译sizeof(structTest)时,编译器不能从
其它文件获取它的类型大小信息
若修改:global.h里float g_var=10;
当编译器发现extern int g_var;当使用g_var时,去定义处找到
g_var, 以int型解释这四个字节的二进制数据(且%d)
6、小结
函数是面向过程思想在C语言中的体现
面向过程是由上至下分解问题的设计方法
程序中的定义和声明完全不同
C语言中通过extern对程序单元进行声明