本篇包括远中期学习内容[[#创建动态链接库、静态库]]
调用
- 传值调用
- 传址调用 可在自定义函数中通过解引用操作符*直接操作函数外部变量C
void Swap (int *a,int *b){ int c = 0; c = *a; *a = *b; *b = c; } void main(){ int a = 0; int b = 1; Swap(&a,&b); }
函数可以嵌套调用,但不可以嵌套定义(即在函数体内定义其他函数)
### 链式访问
前提条件:函数存在返回值
不声明函数返回值类型时,默认返回int
不声明返回值时,默认返回最后一个语句的返回值
```C
printf("%d",strlen("abcdef"));//存在返回值函数作为下一级函数的参数C
printf("%d",printf("%d",printf("43")));//输出4321print()函数会返回打印对象的长度
main函数
- 参数 main 函数的参数是从命令提示符下执行程序的时候传入
- int argc:命令行参数的个数
- char* argv[]:命令行中的每一个参数
- char* envp[]:指向环境变量的字符指针,存放当前程序运行环境的参数
函数定义
- 若函数定义在主函数后,需要在主函数前声明
C
int Add(int x,int y);//韩素红声明
int main(){}
int Add(int x,int y){
return x + y;
}函数声明
- 告知编译器函数名称、参数、返回类型
- 函数声明在函数使用之前,需要先声明后使用
- 库函数声明在头文件中
有一个有趣的点,形参其实不一定必须要命名,如果一个原始的函数已经被大量使用但是某个形参被废除,此时我们可以重写该函数但保留该形参的类型但不对其命名。
模块
建立add.h(函数声明)以及add.c(函数实现),构成一个模块
C
add.h
#pragma once//防止头文件重复包含,编译器会自动添加
int Add(int x,int y);
add.c
int Add(int x,int y){
return x+y;;
}
test.c
#include <stdio.h>
#include "add.h"//自己写的头文件用引号,将对应头文件内容拷贝至当前文件
//正常调用模块化代码可以使项目更易于维护 通过vscode转到声明、转到实现可查看库函数的声明以及实现 可编译一个静态库+头文件实现闭源API
创建动态链接库、静态库
后期配合CMake学习