Skip to content

本篇包括远中期学习内容[[#创建动态链接库、静态库]]

调用

  • 传值调用
  • 传址调用 可在自定义函数中通过解引用操作符*直接操作函数外部变量
    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")));//输出4321

print()函数会返回打印对象的长度

main函数

  1. 参数 main 函数的参数是从命令提示符下执行程序的时候传入
  • int argc:命令行参数的个数
  • char* argv[]:命令行中的每一个参数
  • char* envp[]:指向环境变量的字符指针,存放当前程序运行环境的参数

函数定义

  1. 若函数定义在主函数后,需要在主函数前声明
C
int Add(int x,int y);//韩素红声明
int main(){}
int Add(int x,int y){
	return x + y;
}

函数声明

  1. 告知编译器函数名称、参数、返回类型
  2. 函数声明在函数使用之前,需要先声明后使用
  3. 库函数声明在头文件中

有一个有趣的点,形参其实不一定必须要命名,如果一个原始的函数已经被大量使用但是某个形参被废除,此时我们可以重写该函数但保留该形参的类型但不对其命名。

模块

建立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学习