Comments
comments.zig
const assert = @import("std").debug.assert;
test "comments" {
// Comments in Zig start with "//" and end at the next LF byte (end of line).
// The below line is a comment, and won't be executed.
//assert(false);
const x = true; // another comment
assert(x);
}
$ zig test comments.zig
1/1 test "comments"...OK
All tests passed.
There are no multiline comments in Zig (e.g. like /* */
comments in C). This helps allow Zig to have the property that each line of code can be tokenized out of context.
Doc comments
A doc comment is one that begins with exactly three slashes (i.e. ///
but not ////
); multiple doc comments in a row are merged together to form a multiline doc comment. The doc comment documents whatever immediately follows it.
/// A structure for storing a timestamp, with nanosecond precision (this is a
/// multiline doc comment).
const Timestamp = struct {
/// The number of seconds since the epoch (this is also a doc comment).
seconds: i64, // signed so we can represent pre-1970 (not a doc comment)
/// The number of nanoseconds past the second (doc comment again).
nanos: u32,
/// Returns a `Timestamp` struct representing the Unix epoch; that is, the
/// moment of 1970 Jan 1 00:00:00 UTC (this is a doc comment too).
pub fn unixEpoch() Timestamp {
return Timestamp{
.seconds = 0,
.nanos = 0,
};
}
};
Doc comments are only allowed in certain places; eventually, it will become a compile error to have a doc comment in an unexpected place, such as in the middle of an expression, or just before a non-doc comment.