函数的由来:
模块化程序设计:
C语言中的模块化:
面向过程的程序设计:
函数的声明和定义:
声明和定义是不同的。示例如下:
1 #include <stdio.h> 2 #include <malloc.h> 3 4 extern int g_var; 5 6 extern struct Test; 7 8 int main() 9 { 10 extern void f(int i, int j); 11 extern int g(int x); 12 13 struct Test* p = NULL; // (struct Test*)malloc(sizeof(struct Test)); 14 15 printf("p = %p ", p); 16 17 //g_var = 10; 18 19 printf("g_var = %d ", g_var); 20 21 f(1, 2); 22 23 printf("g(3) = %d ", g(3)); 24 25 free(p); 26 27 return 0; 28 }
global.c如下:
1 #include <stdio.h> 2 3 int g_var = 10; 4 5 struct Test 6 { 7 int x; 8 int y; 9 }; 10 11 void f(int i, int j) 12 { 13 printf("i + j = %d ", i + j); 14 } 15 16 int g(int x) 17 { 18 return (int)(2 * x + g_var); 19 }
第4行说明g_var在其它文件中定义,在这里不会再分配存储空间。第6行声明有struct Test这样一个结构体(并不是声明变量),这里是告诉编译器在后续的编译过程中如果看到了struct Test不要意外,不要报错,但是也只能定义这个结构体的指针。例如,第13行,因为我们在这个文件中不能得到这个结构体的大小。
运行结果如下:
我们将global.c中第三行的g_var的声明改成float类型,再次编译运行,如下:
可以看到g_var变成了一个很大的值,因为从float到int,它的解释方式变了。
小结: