当前位置: 首页 > 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.gsyq.cn/news/1484082.html

相关文章:

  • 10美元鼠标秒变苹果触控板:Mac Mouse Fix 如何释放 macOS 隐藏的鼠标潜能
  • GalTransl完整指南:三步实现Galgame智能AI汉化的终极方案
  • 终极指南:让Windows Vista和Server 2008也能运行最新Python 3.14
  • LivePortrait深度解析:三分钟让静态人像开口说话的艺术
  • 如何打造智能家庭音乐中心:XiaoMusic小爱音箱音乐播放器完整指南
  • 2026年评价高的强磁磁钢/N52强磁铁优质公司推荐 - 行业平台推荐
  • emexDE:革命性iOS设备原生开发IDE,无需越狱即可在iPhone上编写iOS应用
  • 2026年质量好的内墙底层腻子粉/外墙抗开裂腻子粉/内墙抗裂腻子粉‌横向对比厂家推荐 - 行业平台推荐
  • NLP工业落地指南:多模态框架、结构化文档抽取与spaCy工程实践
  • 2026年全自动高精度过程校验仪/过程信号校验仪/压力校验装置/校验仪厂家推荐与选型指南 - 品牌宣传支持者
  • 2026年评价高的超强磁铁/N52强磁铁精选推荐公司 - 品牌宣传支持者
  • 2026年口碑好的湖南智能工业分析仪/智能工业分析仪/全自动工业分析仪批量采购厂家推荐 - 品牌宣传支持者
  • 国民技术N32G45X实战:用DMA搞定ADC多路采样,告别CPU轮询
  • UniWorld常见问题解决:从安装到训练的全方位故障排除指南
  • Virtual-Display-Driver:为Windows系统添加虚拟显示器的完整指南
  • 2026年评价高的超细碳酸钙/活性碳酸钙推荐品牌厂家 - 品牌宣传支持者
  • 2026年知名的检测机构/盐雾检测机构用户推荐 - 品牌宣传支持者
  • esp32开发与应用(oled屏幕显示)
  • C#玩转ModbusRTU:从报文生成到完整通讯,这些坑我帮你踩过了
  • 震撼!专业两联供厂家,你不知道的隐藏优势!
  • Audio Shop故障排除与性能优化:常见问题与解决方案大全
  • YOPO在实际场景中的应用:室内外复杂环境的自主导航挑战与解决方案
  • 2026年知名的广东工程电缆/珠三角电缆/广东电力电缆/广东电线电缆横向对比厂家推荐 - 品牌宣传支持者
  • 2026年热门的湖南智能自动测硫仪/全自动测硫仪/湖南全自动测硫仪/智能自动测硫仪定制加工厂家推荐 - 品牌宣传支持者
  • 知识图谱与大语言模型在推荐系统中的协同应用
  • 多维聚合数据操作:维度保全、重构与增删的工程实践
  • STM32CubeMX配置FreeRTOS信号量时,这3个坑我帮你踩过了(避坑指南+代码优化)
  • 2026年靠谱的东莞大扭矩减速电机/低噪音长寿命减速电机/小型涡轮蜗杆减速机/东莞有刷直流减速电机推荐品牌厂家 - 行业平台推荐
  • 2026年评价高的护栏/人行护栏/景观护栏/防撞护栏口碑好的厂家推荐 - 品牌宣传支持者
  • MBX-7B-v3部署方案对比:本地部署vs云端服务