fn square(x: anytype) @TypeOf(x) {return x * x;}const result = comptime square(2 + 3); // result = 25, at compile-time Zig 编译器的另一个优点是能对输入进行类型检查,即使它是 anytype。当在 Zig 中调用 square 函数时,如果使用了不支持 * 操作符的类型,将导致编译时类型错误:const...
const Person = struct { age: u8};const maybe_p: Person = null; // compile error: expected type 'Person', found '@Type(.Null)'const maybe_p: ?Person = null; // OKstd.debug.print("{}", { maybe_p.age }); // compile error: type '?Person' does not support field accessstd...
以下是 Zig 中的 C SQUARE 宏: fn square(x: anytype) @TypeOf(x) {return x * x; const result = comptime square(2 + 3); // result = 25, at compile-time Zig 编译器的另一个优点是能对输入进行类型检查,即使它是 anytype。当在 Zig 中调用 square 函数时,如果使用了不支持 * 操作符的...
Zig 里能直接引入 C 头文件,构建系统能编译 C/C++ 代码、链接现有 C 库。conststd=@import("std"...
显然 C 语言标准中不存在上述等价的功能;至于 C++ ,我不敢说不可能,但用模板元编程计算校验和有多...
然而,Zig 采用了一种更直观的方法来处理此类任务,引入了comptime参数和函数。这使我们能够在编译时执行函数,而不是运行时。以下是 Zig 中的 CSQUARE宏: fn square(x: anytype)@TypeOf(x){returnx * x;} constresult = comptime square(2+3);// result = 25, at compile-time ...
Compile Flashing with CC Debugger Get SmartRF Flash Programmer v1.12.8 (not v2.x!) from https://www.ti.com/tool/flash-programmer Connect CC Debugger to the Debug-Port of ZigUP with an 1:1 cable. Select "Program CCxxxx..." and "System-on-Chip" tab Load HEX-File and perform "Eras...
另一方面,Zig通过引入参数和函数,为这类任务采用了更加直观的方法。这使我们能够在编译时而不是运行时执行函数。下面是同一个C语言宏在Zig: comptimesSQUARE中 fn square(x: anytype) @TypeOf(x) { return x * x; } const result = comptime square(2 + 3); // result = 25, at compile-time ...
Item.c => |*item| blk: { item.*.x += 1; break :blk 6; }, // No else is required if the types cases was exhaustively handled Item.d => 8, }; bit_count = switch (@typeInfo(T)) { .Int => |info| info.bits, .Float => |info| info.bits, else => @compileError("shift...
Zig compile-time与元编程 Zig 的元编程由以下几个基本概念驱动: 1. 类型在编译时是有效值。 2. 大多数运行时代码也可以在编译时工作。 3. 结构体字段在编译时是鸭子类型(duck-typed)。 4. Zig 标准库提供了一些工具来进行编译时反射。 Zig 示例代码 ...