Subject: Re: bin/30600
To: None <gnats-admin@netbsd.org, netbsd-bugs@netbsd.org>
From: Christian Biere <christianbiere@gmx.de>
List: netbsd-bugs
Date: 06/27/2005 00:11:02
The following reply was made to PR bin/30600; it has been noted by GNATS.
From: Christian Biere <christianbiere@gmx.de>
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/30600
Date: Mon, 27 Jun 2005 02:10:00 +0200
I'd be surprised if the "if" in loop causes any noticeable slow-down. The
suggested variant modifies a variable while passing it as parameter. I
consider that bad practise.
The additional putchar() in the original variant may possibly cause a minor
slow-down at least that should weigh much more than the "if". My preferred
version is as follows.
for (/* NOTHING */; *argv; argv++)
(void)printf(argv[1] ? "%s " : "%s", argv[0]);
It doesn't cause any additional call. The "if" is still there. Another
common way is using "%s%s" as format string whereas the last "%s" takes
" " or "". That would be more work for printf().
On the other hand, this one is probably still faster:
if (*argv) {
(void)fputs(*argv, stdout);
while (*++argv) {
(void)putchar(' ');
(void)fputs(*argv, stdout);
}
}
Interestingly, FreeBSD uses a much more complicated version. If you
care that much about the performance of /bin/echo you might want to
check that one.
--
Christian