I think there are cases when putting more than 2 (btw, why two, why not three or five?..)
things on one line would be more readable than putting them on separate lines.
This is something like my C example above, but in Zig, and I kept that rule:
const std = @import("std");
const ModbusCmndDesc = struct {
func: u8,
sreg: u16,
nreg: u16,
};
pub fn main() void {
const someCmdSequence: [3]ModbusCmndDesc = .{
.{
.func = 0x04,
.sreg = 0x00AA,
.nreg = 1,
},
.{
.func = 0x04,
.sreg = 0x00BB,
.nreg = 1,
},
.{
.func = 0x04,
.sreg = 0x00CC,
.nreg = 1,
},
};
for (someCmdSequence) |c| {
std.debug.print("{}\n", .{c});
}
}
Now note the output:
$ ./aa
aa.ModbusCmndDesc{ .func = 4, .sreg = 170, .nreg = 1 }
aa.ModbusCmndDesc{ .func = 4, .sreg = 187, .nreg = 1 }
aa.ModbusCmndDesc{ .func = 4, .sreg = 204, .nreg = 1 }
Zig itself (well, a function from standard library) ouputs each struct on a single line.
So why can’t I do this in source code? 
For me
const someCmdSequence: [3]ModbusCmndDesc = .{
.{.func = 0x04, .sreg = 0x00AA, .nreg = 1},
.{.func = 0x04, .sreg = 0x00BB, .nreg = 1},
.{.func = 0x04, .sreg = 0x00CC, .nreg = 1},
};
is more readable, just because it naturally has a form of evenly aligned 2-dim table
(provided that names of fields are of the same length, of course). When checking some particular field, it is more convenient to have all instances of that field to be in one column,
due to a way how our vision works.