1.嵌套调用
*定义:函数之间的互相调用
*例:
int function1(int a, int b)
{
function2(b);//嵌套函数的调用
return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{
}
#include <stdio.h>
int main()
{
int c = 0;
int d = 0;
int e = 0;
function1(c,d);
function2(e);
return 0;
}
2.链式访问
*定义:将一个函数的返回值作为另外一个函数的参数,像链条一样将函数串起来就是函数
的链式访问
#include <stdio.h>
#include <string.h>
int main()
{
printf("%zd", strlen("abc"));
return 0;
}
strlen函数的返回值作为printf的参数
练习:求打印结果
#include <stdio.h>
int main()
{
printf("%d", printf("%d",printf("%d",123)));
return 0;
}
3个printf,由里向外执行
查阅printf的返回值:字符的个数
打印123,返回3作为参数给printf,打印3返回1作为参数给printf,打印1
结果:12331
3.函数的声明和定义
*单个文件的声明
如果将上述代码上下颠倒
#include <stdio.h>
int main()
{
int c = 0;
int d = 0;
int e = 0;
function1(c,d);
function2(e);
return 0;
}
int function1(int a, int b)
{
function2(b);//嵌套函数的调用
return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{
}
编译器报错:
原因:C语言编译器对源代码进行编译的时候,是从第一行往下扫描的,所以函数的调用一定要满足,先声明,后使用(注意区分函数的定义,声明,调用)(函数定义也是特殊的声明)
修改后:
#include <stdio.h>
int function1(int a, int b);//函数的声明,注意加;
void function2(int c);//函数的声明,注意加;
int main()
{
int c = 0;
int d = 0;
int e = 0;
function1(c,d);//函数的调用
function2(e);//函数的调用
return 0;
}
int function1(int a, int b)//函数的定义
{
function2(b);//嵌套函数的调用
return a;
}
//注意:不能将function2定义在function1的里面,这不叫嵌套函数的调用
void function2(int c)
{
}
*多个文件的声明
一般地,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)文件中
优点:方便写作;代码隐藏;模块化,代码可复用
test.h
int function1(int a, int b);//函数的声明,注意加;
void function2(int c);//函数的声明,注意加;
function1.c
int function1(int a, int b)//函数的定义
{
function2(b);//嵌套函数的调用
return a;
}
function2.c
void function2(int c);//函数的声明,注意加;
{
int c = 0;
int d = 0;
int e = 0;
function1(c,d);//函数的调用
return 0;
}
main.c
#include "test.h"//注意是双引号!
int main()
{
int c = 0;
int d = 0;
int e = 0;
function1(c,d);//函数的调用
function2(e);//函数的调用
return 0;
}
补:引用头文件用< >还是" "的区别
< > 官方提供的库定义
" " 自定义的或项目特定的头文件