当前位置: 首页 > news >正文

跟我一起学“仓颉”编程语言-跨语言互操作

一、仓颉与C语言

在仓颉中要调用 C 的函数,需要在仓颉语言中用@Cforeign关键字声明这个函数。由于C语言函数很可能产生不安全操作,所以调用foreign修饰的函数需要被unsafe块包裹,否则会发生编译错误。

package Study foreign func rand(): Int32 foreign func printf(fmt: CString, ...): Int32 main() { let r = unsafe { rand() } println("随机数: ${r}") unsafe { var fmt = LibC.mallocCString("Hello, No.%d\n") printf(fmt, 1) LibC.free(fmt) } }

除此之外,仓颉与C语言的操作还有类型的对应,支持基本数据类型的映射。

仓颉C语言字节
Unitvoid0
Boolbool1
UInt8char1
Int8int8_t1
UInt8uint8_t1
Int16int16_t2
UInt16uint16_t2
Int32int32_t4
UInt32uint32_t4
Int64int64_t8
UInt64uint64_t8
IntNativessize_tplatform dependent
UIntNativesize_tplatform dependent
Float32float4
Float64double8

注意:仓颉与C语言类型对应原则:仓颉的类型不包含C语言里的指针,仓颉的类型和C语言类型具有同样的内存布局。

对于C语言里的指针类型,仓颉也有对应的操作符。

C语言仓颉
struct@C struct
char[]CString
type*Cpointer<type>
package Study /* * C语言里的结构体 */ // typedef struct { // long long x; // long long y; // } Point; /* * C语言里的函数 */ //Point addPoint(Point p1, Point p2); /* * 上述结构体对应到仓颉里就是这样 */ @C struct Point { var x: Int64 = 0 var y: Int64 = 0 } /* * 上述函数对应到仓颉里就是这样 */ @C foreign func addPoint(p1: Point, p2: Point): Point main() { }

注意:目前仓颉刚刚起步,生态还未搭建完成,因此在一些比较困难的场景下或者在仓颉代码实现不了的场景里,才会选择使用跨语言操作,如果仓颉自身可以实现的场景里,建议还是用仓颉进行代码开发。

二、小结

本章为大家详细的介绍了仓颉编程语言中跨语言互操作的内容,下一章,为大家带来仓颉编程语言里最后一个内容,编译与构建。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

http://www.jsqmd.com/news/972355/

相关文章:

  • 洛雪音乐音源:一站式免费音乐聚合终极方案
  • 10美元鼠标秒变苹果触控板:Mac Mouse Fix 如何释放 macOS 隐藏的鼠标潜能
  • LivePortrait深度解析:三分钟让静态人像开口说话的艺术
  • 终极指南:让Windows Vista和Server 2008也能运行最新Python 3.14
  • 告别EVT大杂烩:手把手教你为沁恒CH573打造清爽的MounRiver独立工程
  • 博德之门3脚本扩展器:3步解锁游戏无限可能
  • 2026年别墅朗盛门窗靠谱吗 - 品牌宣传支持者
  • GalTransl完整指南:三步实现Galgame智能AI汉化的终极方案
  • GPT-4的1.8万亿参数与2%激活真相:MoE架构深度解析
  • 告别Hello World!用ESP32和ESP-IDF 4.3亲手点亮第一颗LED(保姆级避坑指南)
  • 2026年质量好的内墙底层腻子粉/外墙抗开裂腻子粉/内墙抗裂腻子粉‌横向对比厂家推荐 - 行业平台推荐
  • AI2.0 【Embedding】嵌入模型 20260608
  • SpringBoot自动配置实战:用@ConditionalOnMissingBean优雅解决Bean冲突(附Drools配置案例)
  • 保姆级教程:在Windows上用ESP-IDF 4.3给ESP32开发板烧录第一个闪灯程序
  • emexDE:革命性iOS设备原生开发IDE,无需越狱即可在iPhone上编写iOS应用
  • 当你的模型‘偏科’时怎么办?深入解读多分类任务中的Precision与Recall权衡
  • 如何打造智能家庭音乐中心:XiaoMusic小爱音箱音乐播放器完整指南
  • 2026年评价高的强磁磁钢/N52强磁铁优质公司推荐 - 行业平台推荐
  • 5分钟轻松搞定:网易云QQ音乐歌词批量提取与格式转换全攻略
  • NLP工业落地指南:多模态框架、结构化文档抽取与spaCy工程实践
  • 嵌入式开发避坑指南:单片机串口接收NMEA-0183数据时,如何解决数据不完整和校验错误?
  • 2026年全自动高精度过程校验仪/过程信号校验仪/压力校验装置/校验仪厂家推荐与选型指南 - 品牌宣传支持者
  • 基于CNN和小波变换的图像去噪算法研究
  • 年收入多少才能逃离北上广?一个技术家庭移居乡村后的真实账单与保险配置攻略
  • 2026年评价高的超强磁铁/N52强磁铁精选推荐公司 - 品牌宣传支持者
  • OpenCV 2.4.13 全组件源码包:含文档、示例、跨平台CMake构建配置
  • 5分钟快速上手:免费在线图表编辑器的终极完整指南
  • 多维聚合中的数据操纵:超越GROUP BY的结构重塑技术
  • 2026年别墅朗盛门窗怎么选 - 品牌宣传支持者
  • 别再对着文档发愁了!手把手教你用STM32CubeIDE搞定涂鸦Wi-Fi模组MCU SDK移植(附完整代码)