diff options
| author | Alexis Brodeur <brodeuralexis@gmail.com> | 2020-05-29 18:25:21 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-06-01 14:45:35 -0400 |
| commit | c0e5eca6f2e1a688a6703ed36aef300d9393183d (patch) | |
| tree | a641af417f7e99f69083a8a2910d4d0c801ee86d /src-self-hosted/Module.zig | |
| parent | 937dcad0b3802863af0891b2766acb55f89949ba (diff) | |
| download | zig-c0e5eca6f2e1a688a6703ed36aef300d9393183d.tar.gz zig-c0e5eca6f2e1a688a6703ed36aef300d9393183d.zip | |
Add initialization helper
When using C libraries, C99 designator list initialization is often
times used to initialize data structure.
While `std.mem.zeroes` and manually assigning to each field can
achieve the same result, it is much more verbose then the equivalent
C code:
```zig
usingnamespace @cImport({
@cInclude("sokol_app.h");
});
// Using `std.mem.zeroes` and manual assignment.
var app_desc = std.mem.zeroes(sapp_desc);
app_desc.init_cb = init;
app_desc.frame_cb = frame;
app_desc.cleanup_cb = cleanup;
app_desc.width = 400;
app_desc.height = 300;
app_desc.window_name = "no default init";
// Using `std.mem.defaultInit`.
var app_desc = std.mem.defaultInit(sapp_desc, .{
.init_cb = init,
.frame_cb = frame,
.cleanup_cb = cleanup,
.width = 400,
.height = 300,
.window_name = "default init"
});
```
The `std.mem.defaultInit` aims to solve this problem by zero
initializing all fields of the given struct to their zero, or default
value if any. Each field mentionned in the `init` variable is then
assigned to the corresponding field in the struct.
If a field is a struct, and an initializer for it is present, it is
recursively initialized.
Diffstat (limited to 'src-self-hosted/Module.zig')
0 files changed, 0 insertions, 0 deletions
