一、仓颉与C语言在仓颉中要调用 C 的函数需要在仓颉语言中用C和foreign关键字声明这个函数。由于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语言字节Unitvoid0Boolbool1UInt8char1Int8int8_t1UInt8uint8_t1Int16int16_t2UInt16uint16_t2Int32int32_t4UInt32uint32_t4Int64int64_t8UInt64uint64_t8IntNativessize_tplatform dependentUIntNativesize_tplatform dependentFloat32float4Float64double8注意仓颉与C语言类型对应原则仓颉的类型不包含C语言里的指针仓颉的类型和C语言类型具有同样的内存布局。对于C语言里的指针类型仓颉也有对应的操作符。C语言仓颉structC structchar[]CStringtype*Cpointertypepackage 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() { }注意目前仓颉刚刚起步生态还未搭建完成因此在一些比较困难的场景下或者在仓颉代码实现不了的场景里才会选择使用跨语言操作如果仓颉自身可以实现的场景里建议还是用仓颉进行代码开发。二、小结本章为大家详细的介绍了仓颉编程语言中跨语言互操作的内容下一章为大家带来仓颉编程语言里最后一个内容编译与构建。最后创作不易如果大家觉得我的文章对学习仓颉服务端开发有帮助的话就动动小手点个免费的赞吧收到的赞越多我的创作动力也会越大哦谢谢大家
跟我一起学“仓颉”编程语言-跨语言互操作
发布时间:2026/6/8 4:29:06
一、仓颉与C语言在仓颉中要调用 C 的函数需要在仓颉语言中用C和foreign关键字声明这个函数。由于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语言字节Unitvoid0Boolbool1UInt8char1Int8int8_t1UInt8uint8_t1Int16int16_t2UInt16uint16_t2Int32int32_t4UInt32uint32_t4Int64int64_t8UInt64uint64_t8IntNativessize_tplatform dependentUIntNativesize_tplatform dependentFloat32float4Float64double8注意仓颉与C语言类型对应原则仓颉的类型不包含C语言里的指针仓颉的类型和C语言类型具有同样的内存布局。对于C语言里的指针类型仓颉也有对应的操作符。C语言仓颉structC structchar[]CStringtype*Cpointertypepackage 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() { }注意目前仓颉刚刚起步生态还未搭建完成因此在一些比较困难的场景下或者在仓颉代码实现不了的场景里才会选择使用跨语言操作如果仓颉自身可以实现的场景里建议还是用仓颉进行代码开发。二、小结本章为大家详细的介绍了仓颉编程语言中跨语言互操作的内容下一章为大家带来仓颉编程语言里最后一个内容编译与构建。最后创作不易如果大家觉得我的文章对学习仓颉服务端开发有帮助的话就动动小手点个免费的赞吧收到的赞越多我的创作动力也会越大哦谢谢大家