svn commit: r368714 - head/lib/libc/string

Kevin Bowling kevin.bowling at kev009.com
Sat Dec 19 11:41:47 UTC 2020


On Thu, Dec 17, 2020 at 9:33 AM Ian Lepore <ian at freebsd.org> wrote:

> On Thu, 2020-12-17 at 18:22 +0200, Konstantin Belousov wrote:
> > On Thu, Dec 17, 2020 at 01:01:01PM +0000, Jessica Clarke wrote:
> > > On 17 Dec 2020, at 12:53, Konstantin Belousov <kostikbel at gmail.com>
> > > wrote:
> > > >
> > > > On Thu, Dec 17, 2020 at 12:41:47PM +0000, Mateusz Piotrowski
> > > > wrote:
> > > > > Author: 0mp (doc,ports committer)
> > > > > Date: Thu Dec 17 12:41:47 2020
> > > > > New Revision: 368714
> > > > > URL: https://svnweb.freebsd.org/changeset/base/368714
> > > > >
> > > > > Log:
> > > > >  strerror.3: Add an example for perror()
> > > > >
> > > > >  This is a nice and quick reference.
> > > > >
> > > > >  Reviewed by:   jilles, yuripv
> > > > >  MFC after:     2 weeks
> > > > >  Differential Revision: https://reviews.freebsd.org/D27623
> > > > >
> > > > > Modified:
> > > > >  head/lib/libc/string/strerror.3
> > > > >
> > > > > Modified: head/lib/libc/string/strerror.3
> > > > > ===============================================================
> > > > > ===============
> > > > > --- head/lib/libc/string/strerror.3     Thu Dec 17 03:42:54
> > > > > 2020    (r368713)
> > > > > +++ head/lib/libc/string/strerror.3     Thu Dec 17 12:41:47
> > > > > 2020    (r368714)
> > > > > @@ -32,7 +32,7 @@
> > > > > .\"     @(#)strerror.3  8.1 (Berkeley) 6/9/93
> > > > > .\" $FreeBSD$
> > > > > .\"
> > > > > -.Dd December 7, 2020
> > > > > +.Dd December 17, 2020
> > > > > .Dt STRERROR 3
> > > > > .Os
> > > > > .Sh NAME
> > > > > @@ -170,6 +170,31 @@ The use of these variables is deprecated;
> > > > > or
> > > > > .Fn strerror_r
> > > > > should be used instead.
> > > > > +.Sh EXAMPLES
> > > > > +The following example shows how to use
> > > > > +.Fn perror
> > > > > +to report an error.
> > > > > +.Bd -literal -offset 2n
> > > > > +#include <fcntl.h>
> > > > > +#include <stdio.h>
> > > > > +#include <stdlib.h>
> > > > > +
> > > > > +int
> > > > > +main(void)
> > > > > +{
> > > > > +       int fd;
> > > > > +
> > > > > +       if ((fd = open("/nonexistent", O_RDONLY)) == -1) {
> > > > > +               perror("open()");
> > > > > +               exit(1);
> > > > > +       }
> > > > > +        printf("File descriptor: %d\en", fd);
> > > >
> > > > This lines is indented with spaces, while other lines have tabs.
> > > >
> > > > > +       return (0);
> > > >
> > > > return (0) is redundand.
> > >
> > > It's not required as per the standard, but omitting it is needlessly
> > > obfuscating it and bad practice. C lets you do a whole load of things
> > > that are a bad idea, and whilst this one is harmless, it is nonetheless
> > > confusing to anyone who is not intimately acquainted quirks like this
> > > special case in the standard.
> >
> > Why it is bad practice ?
> >
> > C is a small language, and while knowing some quirks (like this one)
> > seems to be optional, others are not. And worse, that other quirks are
> > essential for writing correct code at all. Consequence is that ignoring
> > details indicates insufficient knowledge of the fundamentals and lowers
> > the trust in the provided suggestion.
>
> I completely disagree.  Writing example code where you fail to return a
> value and just fall out the bottom of some function that declares it
> returns an int is just Bad Code.  Using some obscure quirk of the
> language as justification for that bad code doesn't help the situation
> at all.
>
> How obscure is this quirk?  I've been writing C code since 1983,
> including having released a freeware compiler (pre-gcc days) and
> working on a commercial C compiler.  I used to moderate the c_language
> conference on BIX (back when that was a thing).  I make my living
> writing C and C++ code every day.  And yet, I had completely forgotten
> about this quirk.
>
> Example code shouldn't be used to establish how much more clever you
> are than the reader, it should be as easy to understand as possible.
>
> -- Ian


In Kib’s defense I think this is commonly mentioned in C99 books (at least
that’s where I learned of it) so it depends on when and where someone
learned.  There are merits approaches of being explicit or brief.  I have
no preference directly but we should probably try to be uniform in our
examples with whatever is most common in the docs already.

>


More information about the svn-src-head mailing list