On 1/26/16 4:39 PM, Luigi Rizzo wrote:
On Tue, Jan 26, 2016 at 4:31 PM, Gary Jennejohn <gljennj...@gmail.com> wrote:
On Tue, 26 Jan 2016 17:46:52 -0500 (EST)
Daniel Eischen <deisc...@freebsd.org> wrote:
On Tue, 26 Jan 2016, Gary Jennejohn wrote:
On Tue, 26 Jan 2016 09:06:39 -0800
Luigi Rizzo <ri...@iet.unipi.it> wrote:
On Tue, Jan 26, 2016 at 5:40 AM, Konstantin Belousov
<kostik...@gmail.com> wrote:
On Mon, Jan 25, 2016 at 11:22:13AM +0200, Boris Astardzhiev wrote:
+ssize_t
+recvmmsg(int s, struct mmsghdr *__restrict msgvec, size_t vlen, int flags,
+ const struct timespec *__restrict timeout)
+{
+ size_t i, rcvd;
+ ssize_t ret;
+
+ if (timeout != NULL) {
+ fd_set fds;
+ int res;
Please move all local definitions to the beginning of the function.
This style recommendation was from 30 years ago and is
bad programming practice, as it tends to complicate analysis
for the human and increase the chance of improper usage of
variables.
We should move away from this for new code.
Really? I personally find having all variables grouped together
much easier to understand. Stumbling across declarations in the
middle of the code in a for-loop, for example, takes me by surprise.
I also greatly dislike initializing variables in their declarations.
Maybe I'm just old fashioned since I have been writing C-code for
more than 30 years.
+1
Probably should be discouraged, but allowed on a case-by-case
basis. One could argue that if you need to declaration blocks
in the middle of code, then that code is too complex and should
be broken out into a separate function.
Right.
And code like this
int func(void)
{
int baz, zot;
[some more code]
if (zot < 5)
{
int baz = 3;
[more code]
}
[some more code]
}
is even worse. The compiler (clang) seems to consider this to
merely be a reinitialization of baz, but a human might be confused.
oh please... :)
This is simply an inner variable shadowing the outer one
(which is another poor practice, flagged with -Wshadow ).
When you exit the scope you get the external variable
with its value, as you can see from the following code.
#include <stdio.h>
int main(int ac, char *av[])
{
int baz = 5;
printf("1 baz %d\n", baz);
{
int baz = 3;
printf("2 baz %d\n", baz);
}
printf("3 baz %d\n", baz);
return 0;
}
I agree wholeheartedly with Luigi. I am also surprised that shadowed
variable warnings was not more widely understood.
It's time to move forward and make the code more readable and
maintainable. Having scoped variables just makes sense. It's true that
if you see very many of them, then it's likely time to introduce
separate functions, but only in extreme cases, not on a case-by-case basis.
-Alfred
_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"