函数的嵌套调用和链式访问

简介: 函数的嵌套调用和链式访问
  1. 函数的嵌套调用和链式访问

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的

1.1 嵌套调用
代码演示:

define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

void new_line()
{
    printf("hehe\n");
}
void three_line()
{
    int i = 0;
    for (i = 0; i < 3; i++)
    {
            new_line();
    }
}

int main()
{

three_line();
return 0;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

注意:函数可以嵌套调用,但是不能嵌套定义,每个函数地位都是相等的,并列的关系

1.2 链式访问
把一个函数的返回值作为另外一个函数的参数
链式访问的条件:函数必须有返回值

代码演示:

define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

include<string.h>

int main()
{

int len = strlen("abcdef");
printf("%d\n", len);

//链式访问
printf("%d\n", strlen("abcdef"));

printf("%d", printf("%d", printf("%d", 43)));
return 0;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
运行结果:

分析:printf函数的返回值是打印的字符的个数

  1. 函数的声明和定义

2.1函数声明:
写一个加法函数:

define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

int Add(int x, int y);//函数的声明
int main()
{

int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//加法
int sum = Add(a, b);
printf("%d\n", sum);

return 0;

}
//函数的定义
int Add(int x, int y)
{

return x + y;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
如果不进行函数声明,程序可以编译运行,但是会出现警告
注意:1. 函数声明是告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了

  1. 函数的声明一般出现在函数的使用之前。要满足先声明后使用
  2. 函数的声明一般要放在头文件中的

2.2函数定义:
函数的定义是指函数的具体实现,交待函数的功能实现

举个栗子:

实现一个计算器
1,加法——A程序猿
add.h add.c

2,减法——B程序猿
sub.h sub.c

3,乘法——C程序猿
mul.h mul.c

4,除法——D程序猿
div.h div.c
代码演示:
add.h

pragma once

//防止头文件被重复包含
int Add(int x, int y);//函数的声明
1
2
3
add.c

define _CRT_SECURE_NO_WARNINGS

int Add(int x, int y)
{

return x + y;

}
1
2
3
4
5
sub.h

pragma once

int Sub(int x, int y);
1
2
sub.c

define _CRT_SECURE_NO_WARNINGS

int Sub(int x, int y)
{

return x - y;

}
1
2
3
4
5
test.c

define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

include"add.h"

include"sub.h"

int main()
{

int a = 0;
int b = 0;
scanf("%d %d", &a, &b);//20 30
//加法
int sum = Add(a, b);
printf("%d\n", sum);//50
//减法
int ret = Sub(a, b);
printf("%d\n", ret);//-10

return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
包含头文件的本质是将头文件的内容全部拷贝过来

在初学编程时,我们习惯把所有的代码都写到一个文件中,但是在公司中要考虑分工协作问题,模块化设计

再举个栗子:

公司B想完成一个加法功能test.c,但是他不会,程序猿A写了一个程序可以完成这个任务并且卖给B公司,后期代码的维护维修也是A来完成。为了防止公司复刻源代码,程序猿A将 add.c 编译成静态库文件add.lib,然后将头文件add.h提供给B公司,B公司就知道怎样使用,功能的实现是在add.lib中实现的,add.lib文件都是一些乱码了,无法看懂,这样就在一定程度上保护了源文件

我们看一下怎样将add.c文件编译成静态库:

add>右击鼠标>属性

配置属性>常规>配置类型>静态库(.lib)

add.c配置完成后会生成add.lib,它是无法直接执行的,所以会报错

将add.h和add.lib交给B公司

代码演示:

define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

include"add.h"

pragma comment(lib,"add.lib")

int main()
{

int a = 0;
int b = 0;
scanf("%d %d", &a, &b);//20 30
//加法
int sum = Add(a, b);
printf("%d\n", sum);//50

return 0;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
注意:B公司买add.lib回来之后要导入静态库文件才能使用

pragma comment(lib,"add.lib")

1
add.lib在vs中打开是这个样子的:

此时,add.c所实现的功能都在add.lib中,B公司是看不到add.c的真是实现的

如果我们将函数的声明和定义放在一起,就不能单独剥离出来让别人使用了

相关文章
|
1月前
嵌套调用和链式访问
嵌套调用和链式访问
20 0
|
8月前
|
前端开发
9 # 实现链式调用里普通值处理
9 # 实现链式调用里普通值处理
22 0
|
1月前
|
Python
函数嵌套调用
函数嵌套调用
24 1
|
28天前
|
C语言
C语言函数的嵌套调用详解
C语言函数的嵌套调用详解
17 1
|
28天前
|
算法 Python
Python函数的嵌套调用:深入理解与应用
Python函数的嵌套调用:深入理解与应用
37 1
|
1月前
|
Rust Java Serverless
函数与方法的区别
函数与方法的区别,当然是有区别。 不管是java、rust还是go,他们都是不一样的。
38 1
|
1月前
|
算法 编译器 C语言
C learning_10 (函数的嵌套调用和链式访问、函数的声明和定义、函数递归)
C learning_10 (函数的嵌套调用和链式访问、函数的声明和定义、函数递归)
|
1月前
|
机器学习/深度学习 算法 编译器
【C语言】函数 ---- 函数的嵌套调用和链式访问、函数的声明和定义、变量的声明和定义、函数递归与迭代、递归时的栈溢出问题
【C语言】函数 ---- 函数的嵌套调用和链式访问、函数的声明和定义、变量的声明和定义、函数递归与迭代、递归时的栈溢出问题
58 0
|
1月前
|
Python
python函数的返回值、嵌套方式以及函数中的变量(二)
python函数的返回值、嵌套方式以及函数中的变量(二)
223 1
|
1月前
|
算法 Python
函数的递归调用与嵌套调用详解
函数的递归调用与嵌套调用详解
85 0