5 函数的调用过程
- 在c语言中不允许函数嵌套
6 函数的声明与常见终端命令
-
函数需要先声明再调用,也就是说c语言中的函数声明都要写在调用它的函数之前,这点与java,javascript 很不同,但是可以先声明函数头,在写函数体,例子如下
int sum(num1,num2); //先声明的函数头int main(){ int a,b; int result sum(a,b);//调用函数 printf("%d", result); } int sum(num1, num2){//对声明函数的定义 return num1 + num2; }
函数声明就是把函数头拷贝到调用这个函数的代码之前
函数声明的作用,就是告诉编译器函数已经存在了
-
为什么函数的调用会被当作函数的声明?
int sum(int num1, int num2);
//char numberOfCharInTwoChar(char c1, char c2) //如果这里声明就没问题了
int main(){
int a,b;
int result = sum(a, b);
printf("resut = %d",result);
char num = numberOfCharInTwoChar('a', 'A'); //这句会被多做一个int类型的函数声明,而不是函数调用
return 0;
}int sum(int num1, int num2){ return num1 + num2; } char numberOfCharInTwoChar(char c1, char c2){//这句将会报重复声明错误 return c1 - c2; }
- 这是因为在c语言中一个函数如果没有说明它的返回值类型,编译器默认认为它是int返回类型
- 所以当函数不写返回值声明必须返回一个整数,否则也会报错。
-
常用终端命令
- touch <文件名> 创建文件
- open <文件名|文件夹名> 打开文件并编辑
- rmdir <文件夹名> 删除文件夹
- who 查看当前目录属于谁
-
终端编译
- cc -c <*.c> 编译源码,执行后会生成 *.o
- cc <*.o> 连接文件,执行后会生成 *.out
- ./ <*.out> 执行编译完的程序
7 #include 预编译指令
- 终端命令 open a.txt 可以打开文件
- 在终端下编译C语言文件
cc -c main.c
-
.c
后缀为源码;.o
后缀为编译后文件 -
cc main.o
生成可执行文件 -
#include
作用:在预编译的时候拷贝#include
后面文件内容到#include
指定位置 -
#include
是预编译指令,预编译指令就是在编译之前就需要解析处理的指令 -
#include "" 与 #include <>
的区别,include“”- 在当前目录中查找,如过在当前目录中没找到
- 去编译器的include目录中查找,如果还没找到
- 就去系统的include目录中查找,如果还没找到
- 会报错
-
#include <文件名称>
就比"" 少了第一步超找操作- 去编译器的include目录中查找,如果还没找到
- 就去系统的include目录中查找,如果还没找到
- 会报错
- 总结:当你需要包含系统库文件时使用<>,当你包含项目中的文件使用"";
8多文件开发(模块开发)
如下这样互相引用并且声明函数会很麻烦
所以c语言中专门使用.h 文件来存放函数声明,并且使用include 相互引用。
-
.c 文件与 .h 文件是成对出现的并且同名。
main.cinclude <stdio.h> include "my.h"//引用了声明就可以不用在显示引用声明了 //int sum(int n1,int n2); //声明my.c中的函数 //int minus(int n1, int n2); //声明my.c中的函数 int main(){ int result = sum(10,20); int result2 = minus(30,10); printf("result = %d, result2 = %d", result, result2); } ---------------------------------- my.h //.h 文件就是用来声明函数的 int sum(int n1,int n2); int minus(int n1, int n2); ---------------------------------- my.c include "my.h" //引用自己的函数定义 为了在函数内部调用自己的函数 int sum(in1 n1, int n2){ return n1 + n2; } int minus(int n1,int n2){ return n1 - n2; } ---------------------------------- your.c include "my.h" //int sum(in1 n1, int n2);//声明my.c中的函数 int avg(){ return sum(10,10) / 2; }