swift进阶十一:@_silgen_name(自动搜索C函数)

swift进阶 学习大纲

上一节分析Mirror源码分析时,我们发现了一个内部函数@_silgen_name

  1. 常规c函数调用
  2. @_silgen_name

1. 常规c函数调用

  1. .h文件对外声明函数
  2. .c文件实现函数
  3. 创建XXX-Bridging-Header.h桥接文件,import对外头文件
    1. 新建swift语言的命令行项目,添加c文件(test.h,test.c,桥接文件):
      image.png
    1. test.h对外声明ht_add函数:
      image.png
    1. test.c实现ht_add函数:
      image.png
    1. SwiftCTest-Bridging-Header.h桥接头文件中导入test.h文件:
      image.png
    1. main.swift文件中,正常调用c函数ht_add
      image.png

2.@_silgen_name

@_silgen_name功能:

自动搜索调用C函数

  • C函数不具备重载功能,编译后符号是在函数名前加_
    (如test函数,编译后符号名_test
  • 所以C函数具备全局唯一性。正是利用这一特性,@_silgen_name可自动搜索和调用c函数

@_silgen_name使用:

    1. 直接生成.c实现文件
    1. swift文件中使用@_silgen_name传入c函数,并创建swift替换函数,直接调用swift替换函数,即可实现c函数
    1. 新建swift语言的命令行项目,仅添加test.c文件:
      image.png
  • 2.test.c直接导入stdio.h基础库,实现ht_add函数:

    image.png

  • 3.main.swift文件中,@_silgen_name传入c函数(ht_add),并创建swift替换函数(swift_ht_add),直接调用swift替换函数(swift_ht_add),即可实现c函数

    image.png

  • Done~ (是不是非常简单)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容