swift进阶十一:@_silgen_name(自动搜索C函数)
2020-12-20 本文已影响0人
markhetao
上一节分析Mirror源码分析时,我们发现了一个内部函数@_silgen_name
。
-
常规c函数
调用 @_silgen_name
1. 常规c函数调用
-
.h
文件对外声明
函数 -
.c
文件实现
函数 - 创建
XXX-Bridging-Header.h
桥接文件,import
对外头文件
- 新建
swift
语言的命令行
项目,添加c文件(test.h,test.c,桥接文件):
image.png
test.h
对外声明ht_add
函数:
image.png
test.c
实现ht_add
函数:
image.png
SwiftCTest-Bridging-Header.h
桥接头文件中导入test.h
文件:
image.png
main.swift
文件中,正常调用c函数ht_add
image.png
2.@_silgen_name
@_silgen_name功能:
自动
搜索
和调用
C函数
C函数
不具备重载
功能,编译后
的符号
是在函数名前加_
(如test
函数,编译后
的符号名
为_test
)- 所以
C函数
具备全局唯一性
。正是利用这一特性,@_silgen_name
可自动搜索
和调用c函数
@_silgen_name使用:
- 直接生成
.c
实现文件
- 直接生成
-
swift文件
中使用@_silgen_name
传入c函数
,并创建swift替换函数
,直接调用swift替换函数
,即可实现c函数
-
- 新建
swift
语言的命令行
项目,仅添加test.c
文件:
image.png2.
image.pngtest.c
直接导入stdio.h
基础库,实现ht_add
函数:
3.
image.pngmain.swift
文件中,@_silgen_name
传入c函数
(ht_add),并创建swift替换函数
(swift_ht_add),直接调用swift替换函数
(swift_ht_add),即可实现c函数
:
- Done~ (是不是非常简单)