On Sat, Dec 10, 2022 at 05:24:24PM -0500, Jan Schaumann wrote: > Martin Husemann <mar...@duskware.de> wrote: > How do you feel about adding a separate manual page > for the sizeof operator? (See attached proposal, > though my mandoc is not very good and likely needs > clean up.)
some kibitzing on the page itself, since I'm not by any means convinced this would be a bad page to have in the system: (first, since it's an identifier in the C function namespace, even though it's not actually a function, the page belongs in section 3) > .Sh NAME > .Nm sizeof > operator Pretty sure having "operator" there is not correct mdoc. > .Nd yield the storage size of the given operand "find", not "yield" > The unary > .Nm > operator yields the storage size of an expression or Just say that .Nm finds the size. It being an operator rather than a function is a secondary point and belongs as an aside a later section. > data type in > .Em char sized units . > As a result, 'sizeof(char)' is always guaranteed to be 1. It is _defined_ to be 1. > (The number of bits per > .Dv char > is given by the > .Vt CHAR_BITS that's CHAR_BIT > .Sh EXAMPLES > The following example illustrate the possible results ^s > For initialized data or uninitialized arrays of a > fixed size known at compile time, > .Nm > will return the correct storage size: "correct" does not seem like the right word here. > When applied to a struct or union, > .Nm > returns the total number of units in the object, "char-sized units", otherwise it sounds like it returns the number of members in the struct. > When applied to a struct containing a flexible array > member, ^ at the end since most people, even those with plenty of experience reading the standard, have no idea precisely what widgetry "flexible array member" means without looking it up. > if ((buf = malloc(BUFSIZ)) == NULL) { > perror("malloc"); > } > /* Warning: wrong! */ > (void)strncat(buf, input, sizeof(buf) - 1); Don't encourage people to use strncat. Or even strncpy. Make it snprintf if you don't want to use strlcpy. And calling strncat on an uninitialized array is itself wrong :-) > Since it is evaluated by the compiler and not the > preprocessor, the > .Nm > operator cannot be used in a preprocessor expression. There have been compilers where sizeof() works in #if, e.g. Borland's. FWIW. But it's not standard, nor generally implemented. (Though TBH, I'm surprised not, given the large number of #defines about type sizes that a modern compiler's cpp has to know anyway.) -- David A. Holland dholl...@netbsd.org