[Python-Dev] Update PEP 7 to require curly braces in C
Jim J. Jewett
jimjjewett at gmail.com
Tue Jan 19 11:56:41 EST 2016
> On Jan 17, 2016, at 11:10, Brett Cannon <brett at python.org> wrote:
>> While doing a review of http://bugs.python.org/review/26129/
>> ... update PEP 7 to remove the optionality of curly braces
On Mon Jan 18 03:39:42 EST 2016, Andrew Barnert pointed out:
> There are two ways you could do that.
[The one most people are talking about, which often makes an if-clause
visually too heavy ... though Alexander Walters pointed out that
"Any excuse to break code out into more functions... is usually the
right idea."]
if (!obj) {
return -1;
}
> Alternatively, it could say something like "braces must not be omitted;
> when other C styles would use a braceless one-liner, a one-liner with
> braces should be used instead; otherwise, they should be formatted as follows"
That "otherwise" gets a bit awkward, but I like the idea. Perhaps
"braces must not be omitted, and should normally be formatted as
follows. ... Where other C styles would permit a braceless one-liner,
the expression and braces may be moved to a single line, as follows: "
if (x > 5) { y++ }
I think that is clearly better, but it may be *too* lightweight for
flow control.
if (!obj)
{ return -1; }
does work for me, and I think the \n{} may actually be useful for
warning that flow control takes a jump.
One reason I posted was to point to a specific example already in PEP 7
itself:
if (type->tp_dictoffset != 0 && base->tp_dictoffset == 0 &&
type->tp_dictoffset == b_size &&
(size_t)t_size == b_size + sizeof(PyObject *))
return 0; /* "Forgive" adding a __dict__ only */
For me, that return is already visually lost, simply because it shares
an indentation with the much larger test expression. Would that be
better as either:
/* "Forgive" adding a __dict__ only */
if (type->tp_dictoffset != 0 && base->tp_dictoffset == 0 &&
type->tp_dictoffset == b_size &&
(size_t)t_size == b_size + sizeof(PyObject *)) { return 0; }
or:
/* "Forgive" adding a __dict__ only */
if (type->tp_dictoffset != 0 && base->tp_dictoffset == 0 &&
type->tp_dictoffset == b_size &&
(size_t)t_size == b_size + sizeof(PyObject *)) {
return 0;
}
-jJ
--
If there are still threading problems with my replies, please
email me with details, so that I can try to resolve them. -jJ
More information about the Python-Dev
mailing list