C语言4-函数
1.C语言中函数的分类
在C语言中函数分为三类
1.主函数main(),每个C程序中必定有一个main()函数
2.C语言函数库提供的函数
3.自定义的函数
2.C语言中自定义函数的声明和定义
由于C语言是面向过程的语言,依赖于各种函数,不像java(面向对象语言)一样通过调用对象的方法和属性来实现功能
C程序中通过调用函数来实现功能,所以在我们使用函数之前需要对函数进行申明,如果不申明则会报错
在java程序中我们可以通过对象来调用方法,而不用担心因为方法定义在前后而出错,
public class test{ public static void main(String[] args) { this.method(); } public void method() { System.out.print("哈哈!"); } }
但是在C语言中只能后面的函数调用前面的函数(在没有申明函数的情况下),如果前面的函数想要调用后面定义的函数,则必须在函数头部申明后面定义的函数

总之记住在C程序中要使用自定义的函数就必须先申明
// // main.c // helloWorld // // Created by Mac on 14-2-18. // Copyright (c) 2014年 itcast. All rights reserved. // #include <stdio.h> void test(); //在使用一个函数之前要对这个函数进行声明 void sum(int,int); //在申明函数的时候,可以不指定参数,但是必须指定参数的类型 int main(int argc, const char * argv[]) { test(); //在C程序中前面的函数调用后面定义的函数会出错(在没有申明自定义函数的情况下) sum(250, 250); printf("Hello, World!\n"); return 0; } void test() { printf("哈哈!\n"); } void sum(int a,int b) { int c = a + b; printf("%d+%d=%d\n",a,b,c); }
但是在实际开发中我们不可能将所有的函数的定义和函数的申明放在main函数中,实际开发中是分工合作的,所以我们必须讲方法的定义和方法的申明分别放到单独的头文件和单独的.c文件
中去,最后我们在main函数中通过#include "xxx.xx"指令来引入,这样大大减小了main函数的臃肿,也为其它函数调用这些定义的函数提供了便利

// // main.c // helloWorld // // Created by Mac on 14-2-18. // Copyright (c) 2014年 itcast. All rights reserved. // #include <stdio.h> #include "test.h" int main(int argc, const char * argv[]) { test(); //在C程序中前面的函数调用后面定义的函数会出错(在没有申明自定义函数的情况下) sum(250, 250); printf("Hello, World!\n"); return 0; }
// // test.h // helloWorld // // Created by Mac on 14-2-19. // Copyright (c) 2014年 itcast. All rights reserved. // void test(); //在使用一个函数之前要对这个函数进行声明 void sum(int,int); //在申明函数的时候,可以不指定参数,但是必须指定参数的类型
// // test.c // helloWorld // // Created by Mac on 14-2-19. // Copyright (c) 2014年 itcast. All rights reserved. // #include <stdio.h> void test() { printf("哈哈!\n"); } void sum(int a,int b) { int c = a + b; printf("%d+%d=%d\n",a,b,c); }
3.我们不能引用已经被申明的函数的.c文件,因为在链接这个环节会报错
我们还是以上面那段程序作为例子,这里我们将#include "test.h"改成#include "test.c",表面上没有出错,但是当我们运行时就会报错
// // main.c // helloWorld // // Created by Mac on 14-2-18. // Copyright (c) 2014年 itcast. All rights reserved. // #include <stdio.h> #include "test.c" int main(int argc, const char * argv[]) { test(); //在C程序中前面的函数调用后面定义的函数会出错(在没有申明自定义函数的情况下) sum(250, 250); printf("Hello, World!\n"); return 0; }
错误提示中说了说了错误为重复方法,错误处在链接处

分析错误:由于在运行一个C程序要经历四个步骤
源程序-编译-链接-运行
所以我们在分析错误的时候一定要明确错误处在哪个步骤
由于这里我们直接引用.c文件,在编译时期,会将所有的.c文件编译成.obj文件,
然而在连接的时候会讲相关的.obj文件和C语言函数库结合,这里的test.c被编译了
两次,所以在链接的时候会报错说多个样本方法test()和sum()
所以在以后的开发中调用某个函数不要直接引入.c文件,而是引入它的申明文件即可
总结:本节课主要讲解4点
1.C语言中函数的种类有3种(主函数main,函数库中的函数,自定义的函数)
2.C语言是面向过程的语言,功能实现依赖于函数,不像Java等面向对象的语言通过调用对象的属性和方法实现功能
所以C程序中调用某个函数,必须先申明才能使用,如果不申明函数那么只能后面的函数调用前面的函数,而java中
无论方法定义在前后都可以直接通过对象调用
3.在开发中我们不可能将所有的函数申明和函数定义放到一个文件中,我们会讲函数定义和函数申明分别定义在不同的文件中
最后通过#include "xxx.xx"引入申明文件即可调用这些函数
4.我们不能在C程序中引用被申明的函数.c文件,否则会在链接阶段出错(提示重复的方法模板)
——————————————————————————————————————————————————————————————————————————————————

浙公网安备 33010602011771号