同样的,Zig语言中的struct数据结构内部可以定义相关的操作函数,这个时候struct的类型名Vec3就相当于一个namespace。这是Zig语言和C语言中struct数据结构的一个很大的区别。其他方面,Zig语言的struct和C语言的struct就完全等价了,都表示了一个代数数据类型的积类型。 Zig语言中的struct类型的数据的初始化见上面代码中init...
在zig之中,一个zig文件就是一个大的struct,因此了解struct是必不可少的。 和c一样,内部成员必然公开,不过和c不同的是zig的struct可以内带函数,也可以有全局成员。 成员定义 有两种,一种为一个实例内部成员,一种为全局成员,内部成员可以有初始值,全局成员必须有初始值。例子如下: 内部成员定义 const ClassA =...
例如 fn(函数)、struct(结构体)、if(条件语句)等。 命名约定: 驼峰命名法:通常使用驼峰命名法来命名标识符。例如,函数名 calculateSum,类型名 Person。 下划线命名法:在一些情况下,尤其是在与 C 语言交互时,可能需要使用下划线命名法。例如 calculate_sum。 可选类型:Zig 语言中有一个特殊的类型 ?T,表示一个...
struct MyStruct {int myField;};intmain() {struct MyStruct* myStructPtr = NULL;intvalue;value = myStructPtr->myField; // 访问未初始化结构的字段 printf("Value: %d\n", value);return;} Zig 没有任何 null 引用。它有可选类型,用问号在前表示。你只能把 null 分配给可选类型,并且只有...
这段C 代码会突然崩溃,除了一个 SIGSEGV,什么线索都没有,让你不知所措: struct MyStruct {int myField; int main() {struct MyStruct* myStructPtr = NULL;int value; value = myStructPtr->myField; // 访问未初始化结构的字段 printf("Value: %d\n", value); ...
结构体类型struct { ... }包含多个字段的复合数据类型。 枚举类型enum { ... }固定数量的命名值的集合。 联合体类型union { ... }可以存储多种不同类型值的类型,但一次只能存储一个。 别名类型alias T = UT是U的别名。 1、整数类型 Zig 提供了多种整数类型,包括有符号和无符号整数,大小从 8 位到 64...
c_allocator StackFallbackAllocator LoggingAllocator Zig 还支持你自定义分配器。 亿万美元的错误 vs Zig Optionals 这段C 代码会突然崩溃,除了一个SIGSEGV,什么线索都没有,让你不知所措: structMyStruct {intmyField;}; intmain(){structMyStruct* myStructPtr = NULL;intvalue; ...
这段C代码突然崩溃,除了让你知道SIGSEGV到底发生了什么之外,没有任何线索:复制 struct MyStruct { int myField;};int main() { struct MyStruct* myStructPtr = NULL; int value; value = myStructPtr->myField; // Accessing field of uninitialized struct printf("Value: %d\n", val...
Zig的comptime计算还可以涵盖C语言的一些小特性:例如,在最小值为-2^15=-32768且最大值为(2^15)-1=32767的平台中signed,不可能在C中将类型的最小值写signed为文字常量。 signed x = -32768; // not possible in C 这是因为在C中-32768实际上is-1 * 32768并且32768不在signed类型的边界内。然而,在Zig...
那是因为zig还没有到达1.0。zig与C语言无缝兼容,表达起来又比C清晰太多。zig的struct,和C++的类一...